【问题标题】:Sync postgreSql data with ElasticSearch使用 ElasticSearch 同步 postgreSql 数据
【发布时间】:2016-06-19 05:50:15
【问题描述】:

最终我想为 PostgreSql 中的数据提供一个可扩展的搜索解决方案。我的发现使我倾向于使用 Logstash 将写入事件从 Postgres 发送到 ElasticSearch,但是我还没有找到可用的解决方案。我发现的解决方案涉及使用 jdbc-input 以间隔从 Postgres 查询 all 数据,并且不捕获删除事件。

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

【问题讨论】:

  • 这个答案可能会有所帮助(在我提到 Go/Python 二进制日志解决方案的最后):stackoverflow.com/questions/34477095/…
  • 感谢 Val 的指点。我在问这个问题之前发现了那个帖子。但是我认为现在我可以使用 input-jdbc 并做一些额外的工作来处理已删除的数据。您知道如何设置 Logstash 以从 Postgres 捕获事件吗?
  • Uhm... 我认为要解决 DELETE 问题,我永远不会删除主数据库中的任何记录,只需将记录标记为deleted,它将反映在弹性搜索。当我想删除东西时,我在主数据库和 ES 中都设置了删除时间表,以删除带有已删除标记的所有内容。
  • 是的,我也建议使用后一种方法,只需标记为已删除并更新您的时间戳,jdbc 输入就会处理它。
  • 如果您愿意撰写它,我很乐意将其标记为答案:)

标签: postgresql elasticsearch logstash


【解决方案1】:

如果您还需要收到 DELETE 通知并删除 Elasticsearch 中的相应记录,那么 Logstash jdbc 输入确实无济于事。您必须使用解决二进制日志的解决方案,如suggested here

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

当您需要进行一些清理时,您可以删除 PostgreSQL 和 Elasticsearch 中标记为 deleted 的所有记录。

【讨论】:

    【解决方案2】:

    请查看Debezium。这是一个变更数据捕获 (CDC) 平台,可让您处理数据

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

    【讨论】:

      【解决方案3】:

      你也可以看看PGSync

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

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

      您只需定义一个描述数据结构的 JSON 模式 弹性搜索。

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

      例如

      {
          "nodes": {
              "table": "book",
              "columns": [
                  "isbn",
                  "title",
                  "description"
              ]
          }
      }
      

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

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

      它的开发开销很小。

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

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

      查看github repo 了解更多详情。

      你可以从PyPI安装包

      【讨论】:

      • 您好,欢迎您!您是否认为您可以对此进行一些扩展,提供有关 PGSync 的功能以及它将如何帮助解决原始问题的更多信息?最佳答案对外部链接的依赖最少。
      • PGSync 是一个很棒的工具包。它运作良好。您甚至可以指定子表/列和关系并将它们合并到一个索引中。
      • 谢谢,@DamienRoche。它现在是开源的。
      猜你喜欢
      • 2015-04-12
      • 2018-08-07
      • 2020-07-06
      • 2018-01-16
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 2012-08-10
      相关资源
      最近更新 更多