【问题标题】:What will be the best practice to sync mysql and elasticsearch?同步 mysql 和 elasticsearch 的最佳实践是什么?
【发布时间】:2018-10-22 09:46:07
【问题描述】:

我是 mysql 作为我的主要数据存储,并且只通过它执行完整的索引搜索。现在我的数据集有 1M 记录。我想使用弹性搜索进行搜索。问题是我应该如何迁移数据?

在实时场景中,我应该使用异步任务(芹菜,因为我在 django 上有我的应用程序)在我的 mysql 处理了创建、更新或删除之后插入到 es 中。或者我应该有一个在假设 10 之后运行的脚本分钟和池数据。异步推送将需要我维护一个 rabbitmq 队列或增加一个故障转移点的东西。

异步推送或拉取的最佳方法应该是什么?

【问题讨论】:

    标签: django elasticsearch database-migration


    【解决方案1】:

    所有这些方法都有效

    与 cron 任务同步

    • + 易于实施
    • + 如果您使用批量 api,则相对较快
    • + 易于更改 elasticsearch 结构(索引名称、映射),因为它需要重新索引整个数据库,我们无论如何都会这样做
    • - 不是实时更新
    • - 未更改数据的不必要工作
    • -您必须支持同步脚本,以防您更改应用逻辑或数据结构

    与钩子同步

    • + 近乎实时的更新
    • + 无需为所有内容重新编制索引
    • -/+ 取决于你的应用架构你必须支持钩子
    • - 数据不同步(更新数据时 elasticsearch 已关闭)或结构更改的潜在风险 - 您仍然必须支持完整的数据同步脚本

    使用 Elasticsearch 作为主存储

    • + take from site
    • + 可扩展性令人惊叹
    • + 无方案结构非常有用
    • - 但有时您必须指定日期的映射并为特定名称设置索引设置。如果您不准确,您可以使用不适当的数据类型“毒化”字段名称
    • + 分析查询非常强大
    • + 批量 API
    • - take here
    • - 经常更新功能弃用,您必须在迁移到新的 elasticsearch 版本之前修复应用程序
    • -/+ 没有加入

    它们都有效。

    【讨论】:

    • 值得注意的是,ES 人员不建议将 ES 用作主存储。主要原因是ES的主要目标不是数据存储而是搜索引擎。更多答案herehere
    猜你喜欢
    • 2010-09-16
    • 2011-03-04
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多