【问题标题】:Is it a good idea to have synchronous updates to elastic search index对弹性搜索索引进行同步更新是个好主意吗
【发布时间】:2018-01-03 08:05:53
【问题描述】:

我有一个后端存储是 S3 的用例,我们希望通过弹性搜索来支持搜索。一种选择是同时更新 S3 和索引。

我见过的大多数用例都是异步更新索引。同步更新的一个明显缺点是在更新到 S3 成功但索引更新失败时处理失败情况。

如果延迟不是问题,那么反对同步更新的要点是什么?

【问题讨论】:

    标签: elasticsearch indexing amazon-s3 amazon-elasticsearch


    【解决方案1】:

    如果您先索引然后存储,并且存储失败,那么您需要删除已索引的文档(否则,有人将能够在搜索中找到它,并且可能会误以为它存在,而实际上它不存在)。如果存储故障相对罕见,那么它可能会付出代价,但您需要找出它。

    另一方面,如果您存储和索引的对象是并行处理的,那么您实际上会得到相同的效果:当一个对象被存储时,另一个正在被索引,而仍然确保除非存储对象,否则无法搜索对象。这样,您就不需要回滚对索引执行的任何操作。

    【讨论】:

    • 正如您所说,在存储之前进行索引是没有意义的。唯一的一点是,如果将其写入索引失败,我应该使写入失败吗?并行写入的问题是我们需要处理两种失败情况(写入 S3 失败或写入索引失败)。
    • 完全取决于您的用例。对象是否必须可搜索?是否有任何其他方式可以访问它们(例如,他们的 S3 密钥存储在其他地方);你会重试索引吗?等等
    • - 对象必须是可搜索的。 - 当我们拥有主 ID 并且不需要使用其他属性进行搜索时,在少数用例中可以使用其 S3 键读取对象。 - 由于写入延迟不是主要问题,如果失败,我们将重试索引几次。如果索引写入仍然失败,我们可以简单地使调用失败。如果您曾经使用过类似的东西或发现这种方法存在任何重大问题,请告诉我。
    • 您描述的流程非常通用,详细信息完全取决于您的用例。还有更多的因素需要考虑,例如:对象的可用性(它们会很快消失吗?),您是否需要(近)实时搜索等等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    相关资源
    最近更新 更多