Elasticsearch 如果保证读写一致

Elasticsearch 通过多机制组合保障读写一致性,针对高并发场景优化设计,具体实现如下:

一、写入一致性控制‌

‌1.1 一致性级别参数(consistency)‌

写操作时指定分片确认数量,确保数据可靠同步:

quorum(默认):多数分片(主+副本)确认成功,公式:int( (主分片数 + 副本数) / 2 ) + 1

all:所有分片确认(强一致,性能较低)

one:仅主分片确认(弱一致)

‌ 活跃分片等待(wait_for_active_shards)‌指定写操作前需可用的最小分片数(如设为 all 需全部在线),避免写入不可用分片。

二、并发冲突解决‌

‌2.1 乐观锁与版本控制‌

文档自带 _version 字段,更新时校验客户端提交版本号:

若匹配则更新并递增版本号

若冲突则拒绝操作(返回 409 错误)

新版本推荐使用 if_seq_no(序列号)和 if_primary_term(主分片任期)替代 _version,精确控制基于最新状态的更新。

复制代码
PUT /index/_doc/1?if_seq_no=5&if_primary_term=1
{ "data": "new_value" }

三、实时性保障‌

‌3.1 刷新策略(refresh_interval)‌

默认 1 秒刷新一次内存数据到可搜索状态,可通过参数调整:

?refresh=true:写入后强制立即刷新(性能损耗大)

?refresh=wait_for:写入后等待刷新完成再响应(平衡实时性与性能)

‌ 读取偏好设置(preference)‌

查询时指定 preference=_primary,强制从主分片读取最新数据,避免副本延迟导致脏读。

四、分布式协同机制‌

‌4.1 主分片权威性‌

所有写操作仅由主分片处理,再同步至副本分片。

‌4.2全局检查点(Global Checkpoint)‌

标记所有分片已确认同步的操作序列号,加速故障恢复时的数据一致性校验。

‌4.3 主分片切换保护‌

通过递增的 Primary Term 标识主分片任期,避免脑裂场景下数据冲突。

相关推荐
TDengine (老段)6 分钟前
TDengine 时间函数 TODAY() 用户手册
大数据·数据库·物联网·oracle·时序数据库·tdengine·涛思数据
悟乙己38 分钟前
数据科学家如何更好地展示自己的能力
大数据·数据库·数据科学家
东哥说-MES|从入门到精通1 小时前
Mazak MTF 2025制造未来参观总结
大数据·网络·人工智能·制造·智能制造·数字化
盟接之桥1 小时前
盟接之桥说制造:在安全、确定与及时之间,构建品质、交期与反应速度的动态平衡
大数据·运维·安全·汽车·制造·devops
链上日记2 小时前
STC携手VEX发起全球首个碳资产RWA生态,泰国峰会即将引爆绿色金融
大数据
用户Taobaoapi20142 小时前
京东商品列表API(JD.item_search)
大数据·数据挖掘·数据分析
用户Taobaoapi20143 小时前
京东商品评论API开发指南
大数据·数据挖掘·数据分析
微三云-轩3 小时前
小程序:12亿用户的入口,企业数字化的先锋军
大数据·小程序·开源软件
数据智研3 小时前
【数据分享】上市公司数字化转型相关词频统计数据(2000-2024)
大数据·数据分析
zskj_zhyl4 小时前
七彩喜智慧养老:科技向善,让“养老”变“享老”的智慧之选
大数据·人工智能·科技·物联网·机器人