在Springboot应用程序中同步Elasticsearch和PostgreSQL

6
我使用PostgreSQL作为主数据库,希望在SpringBoot应用程序中利用Elasticsearch作为搜索引擎。问题在于查询非常复杂,在每个表中有数百万行数据时,大多数搜索查询会超时。
部分解决方案是利用PostgreSQL中的物化视图的概念,并运行一个定期刷新它们的作业。但是,在存在大量数据和其他数据库事务(特别是写操作)正在进行的系统上,这些视图需要很长时间才能刷新(刷新5个视图需要约10分钟)。我意识到,当前的视图已经达到其容量极限,我无法再添加更多。
于是我开始探索其他选项,最终发现Elasticsearch对我的数据量非常适合。作为POC,我使用了Logstash的Jdbc输入插件,但它不支持DELETE操作。网站Stackoverflow提供了软删除选项,但是出于以下原因我无法使用: A)几乎所有PostgreSQL数据库中的表都会在几分钟内更新一次,其中一些表对“name”键有约束条件,在这种情况下,该键将保留到清理作业运行。 B)我的PostgreSQL数据库中有许多表与CASCADE DELETE相关联,我无法更新220个表的架构和JPA查询以检查软删除布尔值。
与上述问题相关的同一问题提供了PgSync,它会定期将PostgreSQL与Elasticsearch进行同步。但我不能使用它,因为它有LGPL许可证,而我们组织禁止使用该许可证。
我开始怀疑是否还有其他人遇到过Elasticsearch和RDMS之间的这种奇怪限制。我希望能找到更好的解决方案,不一定是Elasticsearch,但不知道应该使用哪个正确的技术栈。非常感谢您在此方面给予协助!

你最后用的是Logstash还是PgSync? - undefined
1个回答

0

Then on the diagram it will look like this

在服务A中,连接关系型数据库时,需要实现一个事件监听器来处理数据的变更、删除和更新。
然后,当需要删除或更新数据时,例如,生产者调用事件监听器,将数据分发到队列并发送到特定的主题,具体取决于数据需要写入的位置。
在服务B中,消费者监听队列,获取所需数据并将其写入Elasticsearch。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接