Interview preparation--Elasticsearch并发控制

Elasticsearch 并发控制
  • Elasticsearch是分布式的。创建,更新,删除文档时,必须将文档的新版本复制到集群中的其他节点。ES也是异步并行的,所有这些复制请求是并行发送的,并且可能不安顺序执行到每一个节点。ES需要一种并发策略来保证数据的安全性,而这种策略就是乐观锁并发控制策略。
  • 为了保证旧文档不会被新文档覆盖,对文档执行的每个操作都由协调该更改的主分片分配一个序列号(_seq_no)。每个操作都会操作序列号递增,因此可以保证较新的操作具有更高的序列号。然后,ES 可以使用操作序列号来确保更新的文档版本永远不会被分配了较小序列号的版本覆盖。
版本号: _version
  • 基本原理:

  • 每个索引文档都有一个版本号。默认情况下,使用从1 开始的内部版本控制,每次更新都会增加。 可选操作是,版本号可以设置为外部(比如在数据库中维护)。 可以通过设置version_type = external。 提供的值必须大于或等于0 而且小于9.2e + 18 左右的数字长整型值。

  • 如果设置了version_type = external,在用外部版本类型时候,系统会检查传递给索引请求的版本号是否大于当前存储文档的版本。如果为真,文档将被索引并使用新的版本号。如果提供的值小于或等于存储文档的版本号,则会发生版本冲突,索引操作将失败。

  • _version 的有效范围是当前文档

使用if_seq_no 和 if_primary_term 进行版本控制
  • if_seq_no 和 if_primary_term 是用来并发控制,和 _version不同,_version属于当前文档,而 _seq_no属于整个index。
  • if_seq_no : 索引级别的版本号,索引中所有文档共享一个 _seq_no
  • _primary_term:是一个整数,当Primary Shard发生重新分配的时候,比如节点冲突,Primary选举或者重新分配等,_primary_term会递增1,主要用来恢复数据时候处理多个文档的_seq_no一样时候避免冲突,避免Primary Shard 上的数据被覆盖。
相关推荐
無森~10 分钟前
MapReduce
大数据·mapreduce
重生之绝世牛码39 分钟前
Linux软件安装 —— zookeeper集群安装
大数据·linux·运维·服务器·zookeeper·软件安装
!chen1 小时前
大数据技术领域发展与Spark的性能优化
大数据·性能优化·spark
重生之绝世牛码1 小时前
Linux软件安装 —— kafka集群安装(SASL密码验证)
大数据·linux·运维·服务器·分布式·kafka·软件安装
行业探路者1 小时前
如何利用二维码提升富媒体展示的效果?
大数据·人工智能·学习·产品运营·软件工程
YangYang9YangYan2 小时前
2026高职大数据与会计专业学数据分析的价值分析
大数据·数据挖掘·数据分析
Dxy12393102162 小时前
Elasticsearch 8.13.4 深度进阶指南:从底层架构到高阶实战的全维突围
大数据·elasticsearch·架构
云雾J视界2 小时前
RAG 还是微调?用 Gemini API 打造企业私有知识库的落地路径
大数据·人工智能·api·知识库·rag·gemini
TDengine (老段)2 小时前
TDengine C# 语言连接器进阶指南
大数据·数据库·人工智能·物联网·c#·时序数据库·tdengine
Solar20252 小时前
工程材料企业数据采集系统十大解决方案深度解析:从技术挑战到架构实践
java·大数据·运维·服务器·架构