当前位置: 首页 > news >正文

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 标识主分片任期,避免脑裂场景下数据冲突。

http://www.lryc.cn/news/574184.html

相关文章:

  • Milvus【工具 01】milvus_cli和可视化工具attu安装使用
  • 【Linux学习笔记】进程间通信之共享内存
  • Three.js 中自定义 UV 坐标贴图详解
  • Ntfs!_LFCB结构如何构建出来的--从Ntfs!NtfsMountVolume到Ntfs!LfsAllocateLfcb
  • CentOS 上安装snmp
  • 如何在 Python 中连接 Elasticsearch 并使用 Qwen3 来实现 RAG
  • AI编程再突破,文心快码发布行业首个多模态、多智能体协同AI IDE
  • 【深度学习加速探秘】Winograd 卷积算法:让计算效率 “飞” 起来
  • SpringCloud系列(33)--使用Hystrix进行通配服务降级
  • 前缀树进阶-经典案例详解
  • Ubuntu20.04安装录屏工具OBS
  • 【Leetcode】有效的括号、用栈实现队列、用队列实现栈
  • Spring Boot + Logback MDC 深度解析:实现全链路日志追踪
  • 从数据到洞察:UI前端如何利用大数据优化用户体验
  • 用Fiddler抓包工具优化API联调流程:与Postman、Wireshark协作实践分享
  • Zynq + FreeRTOS + YAFFS2 + SQLite3 集成指南
  • 在Ubuntu上设置Firefox自动化测试环境:指定Marionette端口号
  • SpringBoot+Vue自习室座位预约系统
  • Lamp和友点CMS一键部署脚本(Rocky linux)
  • 技术干货 | 深度解读GB/T 45086.1-2024 EMC部分关键项
  • Excel学习03
  • 如何在 Vue 应用中嵌入 ONLYOFFICE 编辑器
  • 零基础学习RabbitMQ(2)--Linux安装RabbitMQ
  • 16.数据聚合
  • 文章以及好用网站分享
  • [QMT量化交易小白入门]-六十六、加入评分阈值后,历史回测收益率达到74%
  • Matlab自学笔记六十:符号表达式的缩写和简化
  • <tauri><threejs><rust><GUI>基于tauri和threejs,实现一个3D图形浏览程序
  • WPF中MVVM和MVVMLight模式
  • 技术逐梦之旅:从C语言到Vue的成长之路