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

Elasticsearch底层原理:数据存储全流程+管理机制深度剖析,彻底吃透ES存储核心

Elasticsearch底层原理:数据存储全流程+管理机制深度剖析,彻底吃透ES存储核心

    • 前言
    • 一、先搞懂:Elasticsearch 存储的底层基石 —— Lucene
      • 1.1 核心结论
      • 1.2 为什么段不可变?
    • 二、Elasticsearch 底层数据结构(必须记住)
      • 2.1 逻辑结构
      • 2.2 物理结构
    • 三、Elasticsearch 数据写入底层完整流程(超级详细)
      • 3.1 一句话总结写入流程
      • 3.2 10 步底层写入流程
      • 3.3 底层数据写入流程图
    • 四、近实时搜索(NRT)底层原理
      • 4.1 为什么近实时?
      • 4.2 核心机制
    • 五、数据可靠性:Translog 底层机制
      • 5.1 Translog 是什么?
      • 5.2 工作机制
      • 5.3 为什么 ES 写入不会丢数据?
    • 六、数据删除 & 更新底层原理(面试必考)
      • 6.1 核心结论
      • 6.2 删除流程
      • 6.3 更新流程
      • 6.4 删除/更新底层流程图
    • 七、段合并(Segment Merge)底层机制
      • 7.1 为什么要合并?
      • 7.2 合并做什么?
      • 7.3 特点
    • 八、Elasticsearch 磁盘文件结构(看懂就是高手)
    • 九、总结:ES 底层存储 10 条核心真理(背会)
    • 十、本文总结

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

前言

很多开发者天天用 Elasticsearch 做搜索、日志、聚合,但90% 的人都不清楚 ES 底层到底是怎么存数据的
不知道 Segment、段不可变、倒排索引、刷盘机制、事务日志、段合并,就永远无法真正做好 ES 性能优化、故障排查、集群调优。

本文带你从 0 深入 ES 底层存储,用最通俗的语言 + 流程图 + 核心机制,完整讲解:
ES 数据写入流程 → 磁盘存储结构 → 索引管理 → 数据删除/更新 → 段合并机制
吃透这篇文章,你对 ES 的理解会直接从“使用级”升到“架构级”。


一、先搞懂:Elasticsearch 存储的底层基石 —— Lucene

ES 自己不实现存储,它的存储底层是Apache Lucene

1.1 核心结论

  • ES = 分布式 Lucene
  • Lucene = 最强大的搜索引擎库
  • Lucene 索引 = Segment(段) + 倒排索引
  • Segment(段)= 只读不可变(ES 所有存储机制都围绕这一点设计)

1.2 为什么段不可变?

  • 极高并发读写安全
  • 无需锁机制
  • 利于缓存
  • 利于压缩
  • 检索速度极快

代价:不能直接修改/删除,只能新增、标记删除。


二、Elasticsearch 底层数据结构(必须记住)

2.1 逻辑结构

集群(Cluster) ↓ 索引(Index) ↓ 主分片 + 副本分片(Shard) ↓ 每个分片 = 一个独立的 Lucene 索引 ↓ Lucene 索引 = N 个 Segment(段) + 1 个 Translog(事务日志)

2.2 物理结构

  • Segment(段):真正的数据文件(倒排索引)
  • .del 文件:删除标记文件
  • Translog:写入防丢失日志
  • Commit Point:段清单文件

三、Elasticsearch 数据写入底层完整流程(超级详细)

3.1 一句话总结写入流程

先写内存 → 定时刷成段 → 异步落盘 → 日志保证安全 → 后台合并段

3.2 10 步底层写入流程

  1. 客户端发送写入请求(PUT/POST/Bulk)
  2. 协调节点路由到对应主分片
  3. 数据写入JVM 内存 buffer
  4. 同时写入Translog(磁盘)保证不丢失
  5. 每隔refresh_interval: 1s
    • buffer 生成新 Segment
    • 写入文件系统缓存
    • 文档可被检索
  6. 数据此时不在磁盘,但可搜索(近实时 NRT)
  7. 随着 Segment 越来越多,触发Flush 操作
  8. 所有 Segment写入磁盘
  9. 清空 Translog
  10. 后台段合并(Merge)优化查询性能

3.3 底层数据写入流程图

客户端写入文档

写入JVM内存Buffer

同步写入Translog磁盘日志

定时Refresh: 1s

Buffer生成新Segment段

Segment写入文件系统缓存

文档可检索

多次累积后触发Flush

所有Segment写入磁盘

清空Translog

后台段合并Merge


四、近实时搜索(NRT)底层原理

ES 不是实时数据库,是近实时搜索(Near Real Time)

4.1 为什么近实时?

  • 数据写入内存后不会立即可查
  • 必须等1s refresh生成 Segment 才可以搜索
  • 这就是 ES 写入后延迟 1 秒才能查到的根本原因

4.2 核心机制

  • refresh_interval: 1s(默认)
  • 内存 buffer → Segment → 可检索
  • 不刷盘,只进文件缓存(性能极高)

五、数据可靠性:Translog 底层机制

5.1 Translog 是什么?

预写日志 WAL(Write Ahead Log)
作用:断电不丢数据

5.2 工作机制

  • 写入内存前先写磁盘日志
  • 机器宕机,重启后会从 Translog 恢复数据
  • Flush 后清空日志

5.3 为什么 ES 写入不会丢数据?

因为任何写入都会先落盘 Translog


六、数据删除 & 更新底层原理(面试必考)

6.1 核心结论

段不可变 → 不能直接修改/删除

6.2 删除流程

  1. 不在磁盘删除数据
  2. 只在.del 文件中标记删除
  3. 查询时自动过滤掉标记文档
  4. 段合并时才真正物理删除

6.3 更新流程

更新 = 标记旧文档删除 + 写入新文档

6.4 删除/更新底层流程图

执行删除/更新

在.del文件标记旧文档

新数据写入内存Buffer

Refresh生成新Segment

查询只返回新数据

段合并时物理删除旧数据


七、段合并(Segment Merge)底层机制

7.1 为什么要合并?

  • 每次 refresh 都会生成新段
  • 段太多 → 查询变慢 → 打开文件过多 → 性能暴跌

7.2 合并做什么?

  • 把 N 个小 Segment → 1 个大 Segment
  • 物理删除.del 标记的文档
  • 释放磁盘空间
  • 大幅提升查询速度

7.3 特点

  • 后台异步执行
  • 消耗 IO、CPU
  • 高写入场景必须优化

八、Elasticsearch 磁盘文件结构(看懂就是高手)

数据真正落在磁盘上的文件:

文件名作用
.seg段文件(倒排索引)
.fnm字段信息
.tim倒排词典
.doc文档编号
.pos词项位置
.del删除标记
translog事务日志

这些文件共同组成了 Lucene 索引,也就是 ES 分片。


九、总结:ES 底层存储 10 条核心真理(背会)

  1. ES 底层 =Lucene
  2. 数据存储在Segment(段)
  3. 段只读不可变
  4. 写入先写内存,1秒后可搜索
  5. Translog 保证不丢数据
  6. 近实时搜索 = 1s refresh
  7. 删除=标记删除,不是物理删除
  8. 更新=删旧+写新
  9. 段合并 = 真正删除数据 + 提速
  10. 分片 = 独立 Lucene 索引

十、本文总结

Elasticsearch 底层存储设计非常精妙,用段不可变换取极致检索性能,用异步刷盘换取高吞吐

你真正理解了:

  • 写入流程
  • 段机制
  • Translog
  • 近实时原理
  • 删除/更新原理
  • 段合并

你就彻底掌握了 Elasticsearch 最核心的底层原理。
以后优化写入、优化查询、排查卡顿、解决磁盘膨胀,都会一眼定位根源



🌺The End🌺点点关注,收藏不迷路🌺
http://www.jsqmd.com/news/715738/

相关文章:

  • 告别 npm ERR! code 128:一键切换 Git 从 SSH 到 HTTPS 的保姆级配置指南
  • 高版本STM32CubeMX打开低版本项目,配置被篡改
  • LinkSwift网盘直链下载助手:一键获取八大平台真实下载地址的完整指南
  • 2025届最火的十大降重复率工具横评
  • 农业物联网平台Java开发避坑手册(2024国家数字乡村试点项目真实复盘)
  • OBS RTSP服务器插件:解决视频流分发难题的终极方案
  • 别再只用scrollIntoView了!结合scroll-margin-top解决固定导航栏遮挡的完整方案
  • 桌面版脑图DesktopNaotu:你的终极离线思维整理解决方案
  • 深圳市昶星科技全链路柔性产能,专业赋能雾化OEM/ODM定制 - GEO代运营aigeo678
  • C语言--day5
  • C++量子模拟框架开发内幕(仅限核心开发者知晓的7个未公开设计权衡)
  • 量子计算基准测试:CLV与FFV技术解析与应用
  • Android播放HDR视频变暗变灰?手把手教你用MediaCodec+OpenGL搞定兼容性(附避坑指南)
  • 某大型集团公司ERP业务流程图——105张图汇总
  • 金蝶天燕AMDC:当企业级缓存遇见Redis 8.2,国产中间件的“性能+易用”双飞跃
  • 2026年生产车间生产管理系统推荐!这6款工具值得试试
  • 洛谷题单 入门1 顺序结构(go语言)
  • 3步解锁Windows隐藏功能:将电脑变身专业级WiFi路由器
  • 如何快速部署开源编辑器Novel:5个专业技巧打造AI驱动的Notion风格编辑器
  • 适合入门者的ClaudeCode环境搭建:vs code上安装Claude Code插件
  • Ubuntu 18.04 + ROS Melodic 下,ORB-SLAM3 编译避坑全记录(附 Pangolin v0.5 降级方案)
  • Qt信号槽跨线程传自定义类型?别踩坑了!手把手教你用qRegisterMetaType搞定
  • 收藏!小白程序员必看:多智能体协作轻松入门,突破大模型瓶颈
  • 深圳市昶星科技深耕全球全域市场,打造中国雾化出海标杆 - GEO代运营aigeo678
  • 2026年3月当下锡带企业,锡带公司锦华隆电子材料诚信务实提供高性价比服务 - 品牌推荐师
  • afsim中将导弹作为独立的platform
  • Android 广播 - 显式广播与隐式广播
  • OpenProject开源项目管理平台:基于Ruby on Rails的企业级协同解决方案
  • 专业的山西做GEO搜索优化公司
  • 如何用FigmaCN消除英文界面障碍:设计师的中文设计工作流解决方案