确保ElasticSearch与数据库同步

时间:2012-08-14 12:48:24

标签: ruby-on-rails ruby elasticsearch tire

我正在考虑每日脚本执行以下操作,以便解决ES服务器上的更新出现问题的任何情况(我还没有高可用性设置,即使如此,它也是在DB和ES之间复制数据的情况下,这仍然是一种很好的做法。在将这个脚本放在一起之前,我想我会检查一下我是否正确地使用了这个,以及我是否应该使用任何库或技术。

该脚本将简单地从数据库中检索所有ID以及来自ElasticSearch的所有ID,其中created_at < current_time(当前时间的快照,因为它是脚本运行时的移动目标)。然后,它将根据这些ID集之间的差异添加和删除到弹性搜索。

这听起来像是一种合理的做法吗?

2 个答案:

答案 0 :(得分:2)

要回答我的问题,这不是最佳方法。

更简单(如果更加资源密集)的方法是定期重新构建整个索引。当然,这在生产中很难做到,因为它会导致数分钟或数小时的停机时间,因此诀窍是重建一个新索引并切换到使用它。在ElasticSearch中,您无法重命名索引,但可以使用别名。

讨论了方法here和轮胎用户here的佣金任务。

答案 1 :(得分:0)

请查看jdbc-river插件。这个插件相当稳定,可用于在ES和数据库之间同步数据。