JAVA spring (JPA) 中的PostgreSQL + Elasticsearch 同步

Posted

技术标签:

【中文标题】JAVA spring (JPA) 中的PostgreSQL + Elasticsearch 同步【英文标题】:PostgreSQL + Elasticsearch synchronization in JAVA spring (JPA) 【发布时间】:2018-08-07 03:30:03 【问题描述】:

我们使用 JAVA Spring (JPA),在应用程序中我们在 PostgreSQL 中写入、修改和删除数据。

如何在 PostgreSQL 和 Elasticsearch 之间同步数据?因此,它们将具有相同的数据。

【问题讨论】:

你可以使用github.com/kohesive/elasticsearch-data-import-handler 要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。 这提供了一些方向:***.com/questions/34477095/… 【参考方案1】:

我同意 Vijay 关于一般方法的观点。

基本上,您可以使用 Logstash 记录您的 PostgreSQL 数据,方法是使用 Logstash 中的 pgjdbc 驱动程序(简单的 .jar)直接连接到 PostgreSQL,并使用logstash.conf 编写 SQL 查询以从 PostgreSQL 中获取数据。

我最近在 Towards Data Science 中写了一篇关于 Spring Boot + PostgreSQL 和 ELK 堆栈以及如何设置(包括指向示例项目的 GitHub 存储库链接)的综合指南,您可以在此处找到:https://towardsdatascience.com/a-hitchhikers-guide-to-spring-boot-elasticsearch-logstash-kibana-postgresql-and-docker-5602feaa9fd3

我希望它对使用这个堆栈的每个人都有帮助(即使你不使用 Spring Boot 而只是使用 Spring)

如果你不想阅读这篇文章,这里有一个直接指向 GitHub 的链接:https://github.com/tech4242/spring-elastic-genie

【讨论】:

【参考方案2】:

我假设您使用 PosgreSQL 作为主存储来存储您的数据,并使用 Elasticsearch 作为辅助存储来索引来自 PosgreSQL 的数据以进行搜索。

我建议 Logstash 是最好的选择。您将创建一个将 PosgreSQL 与 elasticsearch 连接起来的配置文件。使用 JDBC 输入插件和 elasticsearch 输出插件并使用该配置文件运行 Logstash。从那里开始同步每个文档。

您还有其他一些选择:

批量同步:编写应用程序/脚本 (perl/python) 以从 PosgreSQL 中提取数据以索引到 Elasticsearch。您可以安排此作业在您希望的特定时间执行。

实时同步:在您成功将记录插入/更新到 PostgreSQL 后,您在同一 API 中发送请求以索引/更新此记录到 Elasticsearch。

【讨论】:

以上是关于JAVA spring (JPA) 中的PostgreSQL + Elasticsearch 同步的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data JPA在Spring Boot中的应用

Spring boot之 JPA/Hibernate/Spring Data

示例 Struts2 spring4.1 jpa/hibernate3.1.6 中的 java.lang.reflect.InvocationTargetException

java - 如何在spring boot java中编写一个函数来处理JPA存储库中的自定义查询?

Spring Boot:整合Spring Data JPA

spring-boot spring data jpa