Elasticsearch 深度原理:在保证数据一致性的前提下,如何安全更新倒排索引?

Elasticsearch 深度原理:在保证数据一致性的前提下,如何安全更新倒排索引?

    • 前言
    • [一、核心前提:Lucene 倒排索引不可变](#一、核心前提:Lucene 倒排索引不可变)
      • [1.1 为什么倒排索引不能修改?](#1.1 为什么倒排索引不能修改?)
      • [1.2 不能修改 → 怎么更新?](#1.2 不能修改 → 怎么更新?)
    • [二、ES 保证一致性更新的三大核心机制](#二、ES 保证一致性更新的三大核心机制)
      • [1. **Translog(预写日志)** → 确保数据不丢失](#1. Translog(预写日志) → 确保数据不丢失)
      • [2. **Version 版本号控制** → 确保并发更新一致性](#2. Version 版本号控制 → 确保并发更新一致性)
      • [3. **段(Segment)不可变 + 软删除 / 追加新段** → 安全更新倒排索引](#3. 段(Segment)不可变 + 软删除 / 追加新段 → 安全更新倒排索引)
  • [三、ES 更新倒排索引的完整流程(保证一致性)](#三、ES 更新倒排索引的完整流程(保证一致性))
  • [四、ES 如何保证更新过程中的**强一致性**?](#四、ES 如何保证更新过程中的强一致性?)
    • [1. 原子性更新(Update 原子性)](#1. 原子性更新(Update 原子性))
    • [2. 版本控制(Optimistic Concurrency Control)](#2. 版本控制(Optimistic Concurrency Control))
    • [3. 读写一致性(Read-Consistency)](#3. 读写一致性(Read-Consistency))
    • [4. 主分片 + 副本一致性](#4. 主分片 + 副本一致性)
    • [5. 近实时一致性(NRT)](#5. 近实时一致性(NRT))
  • [五、ES 更新倒排索引的核心原理总结(最重要)](#五、ES 更新倒排索引的核心原理总结(最重要))
    • [1. **永远不修改旧倒排索引**](#1. 永远不修改旧倒排索引)
    • [2. **更新 = 软删除旧 + 追加新**](#2. 更新 = 软删除旧 + 追加新)
    • [3. **倒排索引只增不减**](#3. 倒排索引只增不减)
    • [4. **最终一致性通过段合并实现**](#4. 最终一致性通过段合并实现)
    • [5. **高一致性通过 version + translog + 副本同步实现**](#5. 高一致性通过 version + translog + 副本同步实现)
  • 六、一句话总结(面试/工作必背)
  • 七、适用场景

|-----------------------------|
| 🌺The Begin🌺点点关注,收藏不迷路🌺 |

前言

Elasticsearch 底层基于 Lucene ,而 Lucene 有一个铁律:倒排索引(Segment)一旦生成,就是不可变的(Immutable)

这意味着:你永远不能直接修改倒排索引文件

但我们在业务中必须执行:

  • 更新文档(Update)
  • 删除文档(Delete)
  • 批量修改
  • 实时写入

那么问题来了:

倒排索引不能改,数据如何更新?如何保证一致性、不丢数据、不重复、不乱序?

这篇文章彻底讲透:

ES 如何在"不可变倒排索引"的前提下,安全更新数据并强保证一致性。


一、核心前提:Lucene 倒排索引不可变

1.1 为什么倒排索引不能修改?

倒排索引一旦写入磁盘,永远不能被修改

原因:

  • 极高并发安全
  • 无需锁
  • 缓存友好
  • 检索性能达到极致

1.2 不能修改 → 怎么更新?

ES 的答案:不修改旧数据,只追加新数据 + 标记旧数据。

这是 ES 实现一致性更新的核心架构思想。


二、ES 保证一致性更新的三大核心机制

要保证不丢数据、不重复、不脏读、原子性、事务性,ES 依靠 3 大底层机制:

1. Translog(预写日志) → 确保数据不丢失

2. Version 版本号控制 → 确保并发更新一致性

3. 段(Segment)不可变 + 软删除 / 追加新段 → 安全更新倒排索引


三、ES 更新倒排索引的完整流程(保证一致性)

流程总览

渲染错误: Mermaid 渲染失败: Parse error on line 4: ...--> D标记旧文档为.deleted(软删除)D --> E[写入新文档 -----------------------^ Expecting 'SQE', 'DOUBLECIRCLEEND', 'PE', '-)', 'STADIUMEND', 'SUBROUTINEEND', 'PIPE', 'CYLINDEREND', 'DIAMOND_STOP', 'TAGEND', 'TRAPEND', 'INVTRAPEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got 'PS'

详细步骤(强一致性保证)

步骤1:版本校验(并发一致性)

ES 会检查 _version

  • 版本不一致 → 更新失败
  • 版本一致 → 继续

作用:防止并发更新覆盖、脏数据。

步骤2:写入 Translog(确保不丢数据)

更新指令先落盘 Translog

即使节点宕机,重启后也能恢复。

步骤3:软删除旧文档(不修改倒排索引)

不删除旧 Segment 里的数据!

只在 .del 文件 中标记:

复制代码
文档ID = 已删除

旧倒排索引完全不动

步骤4:新文档写入内存,生成新倒排段

新数据 → 内存 buffer → refresh → 新 Segment(新倒排索引)

步骤5:查询时自动合并新旧段

查询时,ES 自动:

  1. 读新 Segment
  2. 读旧 Segment
  3. 过滤软删除文档
  4. 返回最新版本

步骤6:段合并(最终物理删除)

后台异步:

  • 新段写入
  • 旧段删除
  • 空间真正释放

四、ES 如何保证更新过程中的强一致性

1. 原子性更新(Update 原子性)

ES 的更新是原子操作

  • 要么更新成功
  • 要么更新失败
    不会出现中间状态。

2. 版本控制(Optimistic Concurrency Control)

ES 使用 乐观锁

复制代码
if 旧version == 当前version
    更新
else
    失败

保证:

  • 不覆盖
  • 不乱序
  • 并发安全

3. 读写一致性(Read-Consistency)

ES 提供三种级别:

  • quorum(大多数,默认)
  • all
  • one

确保:

写入成功 → 一定能查到。

4. 主分片 + 副本一致性

更新流程:

复制代码
主分片写完 → 同步副本 → 返回成功

确保:

所有分片数据一致

5. 近实时一致性(NRT)

默认 refresh:1s

1 秒内数据可查。

若需要立即可查

复制代码
?refresh=true

五、ES 更新倒排索引的核心原理总结(最重要)

1. 永远不修改旧倒排索引

旧 Segment 只读不动。

2. 更新 = 软删除旧 + 追加新

  • 旧:标记删除
  • 新:写入新段

3. 倒排索引只增不减

段只会增加,不会修改。

4. 最终一致性通过段合并实现

后台真正删除旧数据。

5. 高一致性通过 version + translog + 副本同步实现


六、一句话总结(面试/工作必背)

**ES 不修改旧倒排索引,而是通过"软删除+追加新段"实现更新,

依靠版本号、Translog、副本同步,

在倒排索引不可变的前提下,保证强数据一致性。**


七、适用场景

  • 文档更新
  • 数据删除
  • 批量更新
  • 并发写入
  • 实时搜索
  • 高可用、强一致性系统

文末总结

你现在彻底理解了:

倒排索引不可变

ES 如何更新数据

如何保证一致性

软删除、版本、Translog、段机制的作用

这是 Elasticsearch 最核心、最高频、面试必问的底层原理。


|---------------------------|
| 🌺The End🌺点点关注,收藏不迷路🌺 |

相关推荐
艾莉丝努力练剑1 小时前
【Git:综合复盘】Git 原理与使用
大数据·人工智能·git·elasticsearch·面试
IT研究室1 小时前
最新大数据毕业设计选题推荐-基于大数据的全球地震活动时空分布分析与可视化-大数据-Spark-Hadoop-Bigdata
大数据·信息可视化·数据分析·spark·课程设计
计算机源码社1 小时前
基于Hadoop+Spark的商家优惠券营销效果数据分析与可视化-基于Python的商家优惠券营销效果检测与评估分析系统
大数据·hadoop·python·数据挖掘·spark·毕业设计·数据可视化
AcaDesign1 小时前
上海市科技奖申报答辩ppt制作案例_科技进步奖ppt模板_技术发明奖ppt设计_自然科学奖ppt美化
大数据·科技·powerpoint
Raas1008 小时前
MAI Gateway(魔芋企业级AI网关)技术揭秘:AI网关支持哪些模型?从原理到落地
大数据·人工智能·网关·gateway·mai gateway·企业级产品
YangYang9YangYan10 小时前
2026 校招商品分析岗位 JD 拆解,核心指标、工具与面试考点
大数据·数据库·数据分析
大大大大晴天11 小时前
OpenMetadata VS DataHub VS Atlas VS Gravitino
大数据
Qyr9914 小时前
2026全球汽车碳刷行业发展全景分析报告
大数据
蓝速科技15 小时前
便民服务大厅 AI 数字人一体机场景适配与落地指南丨蓝速科技
大数据·网络·数据结构·人工智能·自然语言处理·数据分析·运维开发
精益数智工坊15 小时前
云计算环境数据怎么同步?云计算集成方案有哪些?
大数据·人工智能·数据挖掘·数据可视化