欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 19-并发控制

19-并发控制

2025/4/22 12:45:16 来源:https://blog.csdn.net/zhouweiye2012/article/details/143598389  浏览:    关键词:19-并发控制

ES 中的⽂档是不可变更的。如果你更新⼀个⽂档,会将就⽂档标记为删除,同时增加⼀个全新的⽂档。同时⽂档 的 version 字段加 1

在需要控制并发的场景,通过指定 If_seq_no 和 If_primary_term

  1. 在 Elasticsearch(ES)中的背景
    • Elasticsearch 是一个分布式的搜索和分析引擎。在 ES 的一些高级应用场景,如数据版本控制、消息队列集成或者数据同步等操作中,If_seq_noIf_primary_term这样的字段可能会被用于确保数据的一致性和顺序性。
  1. If_seq_no 在 ES 中的作用
    • 数据更新顺序追踪
      • 在 ES 中,当对文档进行多次更新操作时,If_seq_no可以用于追踪这些更新的顺序。例如,在一个电商商品索引中,对于一个商品文档,可能会有多次价格调整和库存更新。每次更新操作可以分配一个If_seq_no,这样就可以清楚地看到这些操作的先后顺序。
      • 它有助于在出现数据冲突或者需要回滚操作时,准确地定位到某一次特定的更新操作。比如,如果发现商品价格更新出现错误,可以根据If_seq_no找到错误更新之前的正确版本,进行数据恢复。
    • 数据同步场景下的顺序保持
      • 当 ES 集群中的数据在不同节点之间进行同步时,If_seq_no可以确保各个节点按照相同的顺序应用更新。假设一个分布式的 ES 集群,有主节点和多个从节点。主节点上的文档更新按照If_seq_no顺序记录,在同步到从节点时,从节点也按照这个顺序来更新本地的副本,从而保证整个集群的数据一致性。
  1. If_primary_term 在 ES 中的作用
    • 索引版本控制
      • 在 ES 中,索引的结构和配置可能会随着时间而变化。If_primary_term可以用于表示索引的主要版本。例如,当从 ES 7.x 版本升级到 8.x 版本时,索引的一些内部结构(如存储格式、分词器配置等)可能会发生改变。If_primary_term可以用来区分这些不同版本的索引。
      • 对于索引的生命周期管理,如索引的创建、更新和删除操作,If_primary_term可以帮助记录每个阶段的主要版本。比如,在一个日志索引场景中,每天会创建新的索引,随着 ES 版本升级,不同日期创建的索引可能具有不同的If_primary_term值,这有助于对整个日志索引体系进行版本管理和维护。
    • 集群故障恢复中的版本标识
      • 当 ES 集群出现故障(如主节点故障)后,在选举新的主节点和恢复数据的过程中,If_primary_term可以用于标识哪些数据是最新的、与当前集群版本兼容的。新的主节点可以根据If_primary_term来判断从副本节点中获取的数据是否是合适的版本,避免使用过时或者不兼容的数据来重建索引和恢复服务。
DELETE productsPUT productsPUT products/_doc/1
{"title":"iphone","count":100
}GET products/_doc/1PUT products/_doc/1?if_seq_no=1&if_primary_term=1
{"title":"iphone","count":100
}PUT products/_doc/1?version=30000&version_type=external
{"title":"iphone","count":100
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词