同步mysql和elasticsearch的最佳做法是什么?

时间:2016-05-18 20:05:33

标签: django elasticsearch database-migration

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

在实时场景中,我应该使用异步任务(celery as im我的应用程序在django上)在我的mysql处理创建,更新或删除之后插入es。或者我应该有一个脚本运行之后让我们说10分钟和汇集数据。异步推送将要求我维护一个rabbitmq队列或一些可以增加一个故障转移点的东西。

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

1 个答案:

答案 0 :(得分:2)

所有这些方法都有效

与cron任务同步

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

与钩子同步

  • + 近实时更新
  • + 没有无用的工作来重新索引所有内容
  • - / + 取决于您的应用架构您必须支持挂钩
  • - 数据失步的潜在风险(当您更新数据时,elasticsearch已关闭)或结构更改 - 您仍需支持完整数据同步脚本

将Elasticsearch用作主存储

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

他们都工作。