如何解决在 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 举报,一经查实,本站将立刻删除。