使用ElasticSearch同步postgreSql数据

Kha*_*tor 20 postgresql elasticsearch logstash

最后,我希望为PostgreSql中的数据提供可扩展的搜索解决方案.我的发现指出我使用Logstash将写入事件从Postgres发送到ElasticSearch,但是我还没有找到可用的解决方案.我发现的解决方案涉及使用jdbc-input 在一个时间间隔内查询Postgres中的所有数据,并且不捕获删除事件.

我认为这是一个常见的用例,所以我希望你们能与我分享你的经验,或者给我一些指导.

Val*_*Val 14

如果您还需要在DELETE上收到通知并删除Elasticsearch中的相应记录,则Logstash jdbc输入确实无效.您必须按照此处的建议使用围绕binlog的解决方案

但是,如果您仍想使用Logstash jdbc输入,那么您可以做的只是在PostgreSQL中软删除记录,即创建一个新的BOOLEAN列以便将您的记录标记为deleted.然后Elasticsearch中将存在相同的标志,您可以term通过对该deleted字段的简单查询将其从搜索中排除.

每当您需要执行一些清理时,您可以删除deletedPostgreSQL和Elasticsearch中标记的所有记录.


tai*_*ina 11

您还可以查看PGSync

它类似于 Debezium,但更容易启动和运行。

PGSync 是一个变更数据捕获工具,用于将数据从 Postgres 移动到 Elasticsearch。它允许您将 Postgres 作为真实来源并在 Elasticsearch 中公开结构化的非规范化文档。

您只需定义一个 JSON 模式来描述 Elasticsearch 中的数据结构。

这是一个示例架构:(您也可以有嵌套对象)

例如

{
    "nodes": {
        "table": "book",
        "columns": [
            "isbn",
            "title",
            "description"
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

PGsync 会即时为您的文档生成查询。无需像 Logstash 那样编写查询。它还支持和跟踪删除操作。

它同时运行轮询和事件驱动模型来捕获迄今为止所做的更改并通知某个时间点发生的更改。初始同步轮询数据库自上次运行守护程序以来的更改,然后是事件通知(基于触发器并由 pg-notify 处理)以获取对数据库的更改。

它的开发开销非常小。

  • 如上所述创建架构
  • 将 pgsync 指向您的 Postgres 数据库和 Elasticsearch 集群
  • 启动守护进程。

您可以轻松创建包含多个关系作为嵌套对象的文档。PGSync 会为您跟踪任何更改。

查看github repo 以获取更多详细信息。

你可以从PyPI安装包


Yeg*_*mba 8

请看一下Debezium。它是一个变更数据捕获 (CDC) 平台,可让您传输数据

我创建了一个简单的github 存储库,它展示了它是如何工作的

在此输入图像描述