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🌺点点关注,收藏不迷路🌺 |

相关推荐
枯木◊靠推文躺平版10 分钟前
2026 企业级 AI 办公平台选型指南:如何评估可落地的办公 AI 能力
大数据·人工智能
weidian66623 分钟前
小红书广告投放形式和小红书广告投放核心流程
大数据
龙亘川1 小时前
数智驱动民政升级 精准守护民生保障
大数据·数据库·人工智能
小蒋观天下3 小时前
端侧大模型在安防摄像头部署实操(上)|行业痛点、架构选型、落地思路解析
大数据·人工智能·安全·计算机视觉·ai大模型
Elastic 中国社区官方博客3 小时前
使用 Lucene 搜索你的 Bean — 索引
java·大数据·数据库·elasticsearch·搜索引擎·全文检索·lucene
马六六i4 小时前
市面上正规的IP驱动产业新场景新工具有哪些
大数据·网络·python·tcp/ip
AI副业教程4 小时前
加航 Aeroplan 定向活动:加拿大—欧洲高级舱额外 SQC 资讯整理(2026 秋季)
大数据
隔振降噪研究员5 小时前
振动筛振动治理科普
大数据·人工智能
阿部多瑞 ABU6 小时前
泛二次元问题舆论战与问题诸论
大数据·人工智能·ai写作
码云数智-园园6 小时前
码云数智、小鹅通、创客匠人知识付费小程序平台对比
大数据