在 Springboot 应用程序上同步 Elasticsearch Postgresql

如何解决在 Springboot 应用程序上同步 Elasticsearch Postgresql

我有 Postgresql 作为我的主要数据库,我想利用 Elasticsearch 作为我的 SpringBoot 应用程序的搜索引擎。

问题查询非常复杂,每个表中有数百万行,大多数搜索查询超时。

部分解决方:我利用了 Postgresql 中的物化视图概念,并运行了一个每 X 分钟刷新一次它们的作业。但是在具有大量数据和正在进行其他数据库事务(尤其是写入)的系统上,视图往往需要很长时间才能刷新(刷新 5 个视图大约需要 10 分钟)。我意识到目前的观点已达到其容量,我无法添加更多。

那时我开始探索其他仅用于搜索的选项并登陆 Elasticsearch,它与我拥有的数据量配合得很好。作为 POC,我使用了 Logstash 的 Jdbc 输入插件,但它不支持 DELETE 操作(无赖)。 From here删除是我不能选择的选项,因为: A) postgresql 数据库中的几乎所有表每几分钟更新一次,其中一些表对“name”键有约束,在这种情况下,该键将一直保留到清理作业运行。 B) 我的 Postgresql Db 中的许多表都使用 CASCADE DELETE 引用,我无法更新 220 表的 Schema 和 JPA 查询以检查软删除布尔值。

上面链接中提到的相同问题还提供了 PgSync,它会定期将 postgresql 与 elasticsearch 同步。但是,我也不能这样做,因为它具有我们组织禁止的 LGPL 许可证。

我开始怀疑是否还有其他人遇到过这种 Elasticsearch 和 RDMS 的奇怪限制。

我愿意接受其他选项而不是 elasticsearch 来解决我的需求。我只是不知道使用什么是正确的堆栈。非常感谢这里的任何帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?