繁体   English   中英

将数据从PostgreSQL索引到Elasticsearch

[英]Index data from PostgreSQL to Elasticsearch

我想使用多播功能设置一个Elasticsearch集群。一个节点是一个外部Elasticsearch节点,另一个节点是一个节点客户端(客户端属性设置为true-not hold data)。

该节点客户端是使用spring数据elasticsearch创建的。 所以我想将数据从Postgresql数据库索引到外部elasticsearch节点。我已经使用jdbc river插件对数据进行了索引。

但是我想知道有没有可以使用postgresql的索引数据而不是使用river插件的应用程序

尽管它需要编写专用的Postgres-> ES网关并使用某些Postgres特定的功能,但也可以实时执行此操作。 我在这里写过: http : //haltcondition.net/2014/04/realtime-postgres-elasticsearch/

原理实际上很简单,我想出的方法的复杂性是由于处理了一些极端情况,例如多个网关正在运行,并且网关暂时无法使用。 简而言之,我的解决方案是:

  • 将触发器附加到所有感兴趣的表,该表将更新的行ID复制到临时表。
  • 触发器还会发出异步通知,说明行已更新。
  • 一个单独的网关(用Clojure编写的我的网关)连接到Postgres服务器,并监听通知。 这是棘手的部分,因为并非所有Postgres客户端驱动程序都支持异步通知(有一个新的实验性JDBC驱动程序可以使用,这就是我所使用的)。
  • 更新时,网关读取,转换数据并将数据推送到Elasticsearch。

在我的实验中,该模型能够在Postgres行插入/更新之后亚秒内对Elasticsearch进行更新。 显然,这在现实世界中会有所不同。

这里有一个带有Vagrant和Docker测试框架的概念验证项目: https : //bitbucket.org/tarkasteve/postgres-elasticsearch-realtime

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM