首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ElasticSearch上批量刷新数据:批量更新/删除与使用别名从头开始索引

在ElasticSearch上批量刷新数据:批量更新/删除与使用别名从头开始索引
EN

Stack Overflow用户
提问于 2017-04-03 18:05:02
回答 1查看 976关注 0票数 1

我有一个数据来源,它提供了文档的最新快照(而不是差异)。我希望同样的快照反映在搜索的elasticsearch上。我有以下选择来做同样的事情:

  1. 从弹性(使用滚动)获取所有内容,并计算内存中的diff和批量更新(带索引操作的大容量API )--这将要求程序占用两倍的内存来计算diff。
  2. 批量更新(带索引操作的大容量API )从快照中获取所有未更新的内容(使用UID上的筛选器搜索API,最后一次更新),并发出另一个批量请求,以软删除diff (带更新操作的大容量API )--比1略好,因为我们不需要从弹性中下载大量数据,只需要从diff下载大量数据。
  3. 使用别名保持两个索引的弹性,一个是当前的“可搜索”副本,另一个是随时准备更新的。每当出现新快照时,我们可以使用备用快照到[delete all documents][1],将快照中的所有内容大容量更新到备用快照上,并将别名(本质上的别名API -原子)翻转到更新的别名,以便搜索最新的快照。

注意:差别应该很小。

在弹性的性能、成本和空间效率方面,方法2与方法3相比如何?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-05 04:45:34

在内存需求和计算需求方面,选项1显然是性能最差的。您需要: 1)查询主数据源中的所有记录;2)查询Elasticsearch中的所有记录;3)计算出差异;4)再次批量更新Elasticsearch中的所有记录。随着时间的推移,您的主数据源总是包含大约相同数量的记录,但是ES中的记录数量将增加,因为您的快照中有不属于Elasticsearch的新记录,也有需要从Elasticsearch中删除的记录,这意味着上面的步骤2每次将检索越来越多的文档。

使用选项2,您需要1)查询主数据源中的所有记录,2)批量索引它们,3)查询Elasticsearch中未更新的记录,4)在Elasticsearch中批量更新它们。这也不是我的首选,因为与选项1的原因相同,即您的Elasticsearch索引将继续增长。

在我看来,备选方案3最接近理想的解决方案。我建议的是,每次需要对快照进行索引时,都要创建一个新的索引,对快照数据进行批量索引,然后将searchable别名转换为新的索引。您也可以删除旧索引,因为您不再使用它。不需要做任何区分,大容量删除或大容量更新任何事情。

  • 第一天:
    • Index1 (别名:searchable)

  • 第二天:
    • Index1 (可删除)
    • Index2 (别名:searchable)

  • 第三天:
    • Index1 (可删除)
    • Index2 (可删除)
    • Index3 (别名:searchable)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43191422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档