【问题标题】:How to synchronize MySQL database with Amazon OpenSearch service如何将 MySQL 数据库与 Amazon OpenSearch 服务同步
【发布时间】:2021-11-26 12:34:49
【问题描述】:

我是 Amazon OpenSearch 服务的新手,我想知道是否有任何方法可以将 MySQL db 与 Opensearch 实时同步。我想到了 Logstash,但它似乎不支持 delete , update 操作可能不会更新我的 OpenSearch 集群

【问题讨论】:

    标签: mysql elasticsearch amazon-elasticsearch


    【解决方案1】:

    我将为 Elasticsearch 发表评论,因为这是用于此问题的标签。

    你可以:

    • 从数据库中读取 (SELECT * from TABLE)
    • 将每条记录转换为 JSON 文档
    • 将 json 文档发送到 elasticsearch,最好使用_bulk API。

    Logstash 可以为此提供帮助。但我建议尽可能修改应用程序层,并在将数据发送到数据库的同一“事务”中将数据发送到 elasticsearch。

    我在那里分享了我的大部分想法:http://david.pilato.fr/blog/2015/05/09/advanced-search-for-your-legacy-application/

    也看看这个"live coding" recording


    旁注:如果您想运行 Elasticsearch,请查看 Cloud by Elastic,如果需要,也可以从 AWS MarketplaceAzure MarketplaceGoogle Cloud Marketplace 获得。

    Cloud by elastic 是访问所有功能的一种方式,所有功能均由我们管理。想想还有什么,比如安全、监控、报告、SQL、Canvas、地图 UI、警报和名为 ObservabilitySecuritySecurityEnterprise Search 的内置解决方案以及接下来会发生什么 :) ...

    免责声明:我目前在 Elastic 工作。

    【讨论】:

    • 如何在数据库成功和elasticsearch失败的情况下保持两个系统的一致性而不回滚事务?
    • 您可以回滚数据库,但 IMO 最好不要回滚并记录该信息。这样您就不会丢失用户输入的内容。然后您需要将数据再次发送到 ES。或者你可以将失败的文档写入消息队列系统,一旦 ES 返回,读取队列并再次索引文档。
    • 根据您的经验,您认为将数据发送到数据库并将消息发送到队列系统更好(最终将相同的数据发送到 elasticsearch)或者可能将数据发送到数据库然后发送到 elasticsearch直接且仅当弹性搜索失败时,我才会将其发送到消息队列系统?
    【解决方案2】:

    保留一列指示该行的最后修改时间,然后您就可以对 OpenSearch 进行更新。类似的删除,只要有一列表明它是否被删除(软删除),以及它被删除的日期。

    使用此数据库设计,您可以向 OpenSearch/ElasticSearch 发送“删除”或“更新”操作,以根据上次修改/删除日期更新/删除索引。您可以稍后安排一个定期维护作业,从数据库表中永久删除这些行。

    最后,这篇文章可能对你有所帮助How to keep Elasticsearch synchronized with a relational database using Logstash and JDBC

    【讨论】:

      猜你喜欢
      • 2010-11-04
      • 2011-04-25
      • 2019-12-24
      • 2012-04-26
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 2017-05-17
      相关资源
      最近更新 更多