gpt4 book ai didi

elasticsearch - version = 1&version_type = external和if_seq_no = 0&if_primary_term = 1之间的差异

转载 作者:行者123 更新时间:2023-12-03 02:20:08 25 4
gpt4 key购买 nike

基于这个answer,很明显地说:

  • 版本是一个序列号,用于计算文档更新的时间;
  • _seq_no是一个序列号,用于计算索引上发生的操作数,它与primary_term一起用于唯一确定索引上的版本;

  • 但是,作为用户,实现并发控制的 version=1&version_type=externalif_seq_no=0&if_primary_term=1之间有什么区别吗?
    我的理解是:
  • 要实现“外部”并发控制,if_seq_no=0&if_primary_term=1可能会更加不便,因为我们必须同时在DB中记录两个字段,而我们只需要记录versionversion=1&version_type=external即可。
  • 对于“内部”并发控制,if_seq_no=0&if_primary_term=1将提高并行度,而version则更差。

  • 这两个结论对吗?如果正确,为什么要专门?

    我在ES 7.4.2中做了一些简单的实验,如下所示:
    POST test/_bulk
    {"index": { "_id": 1 }}
    {"test": 1}
    {"index": { "_id": 2 }}
    {"test": 2}

    PUT test/_doc/1?version=1&version_type=external&error_trace=true
    {
    "test": 1
    }

    GET test/_doc/1

    PUT test/_doc/1?if_seq_no=0&if_primary_term=1&error_trace=true
    {
    "test": 1
    }

    最佳答案

    基于这个古老的Elasticsearch Versioning Support帖子,我看到_version在ES中用于并发控制。
    Breaking changes in 6.7中,我可能只是在这里引用。

    internal version may not uniquely identify a document’s version if an indexed document wasn’t fully replicated when a primary fails. As such it is unsafe to use for optimistic concurrency control, is deprecated and the option will no longer be available in Elasticsearch 7.0.0. Please use the if_seq_no and if_primary_term parameters instead.


    所以基本上答案是:
  • 如果我们有外部版本控制系统,我们可以将它们都用作“外部”并发控制。
  • 在ES的“内部”并发控制中,我们应该使用if_seq_no=0&if_primary_term=1作为唯一选项。
  • 关于elasticsearch - version = 1&version_type = external和if_seq_no = 0&if_primary_term = 1之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62622922/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com