从 PostgreSQL 到 Elasticsearch 的索引数据
Posted
技术标签:
【中文标题】从 PostgreSQL 到 Elasticsearch 的索引数据【英文标题】:Index data from PostgreSQL to Elasticsearch 【发布时间】:2014-07-15 20:29:37 【问题描述】:我想使用多播功能设置一个elasticsearch集群。一个节点是外部elasticsearch节点,另一个节点是节点客户端(客户端属性设置为true-不保存数据)。
这个节点客户端是使用spring data elasticsearch创建的。所以我想将postgresql数据库中的数据索引到外部elasticsearch节点。我已经使用jdbc River插件索引了数据。
但我想知道是否有任何应用程序可以用于来自 postgresql 的索引数据,而不是使用 River 插件?
【问题讨论】:
【参考方案1】:虽然需要编写专用的 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
【讨论】:
以上是关于从 PostgreSQL 到 Elasticsearch 的索引数据的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL:将结果数据从 SQL 查询导出到 Excel/CSV
从 MySQL 迁移到 PostgreSQL 时,Django 用户应该知道啥?