Elasticsearch 数据存储底层机制详解

Elasticsearch 数据存储底层机制详解

Elasticsearch 的底层存储机制依赖 Lucene 来实现数据的组织和管理。下面从数据存储的 流转过程管理机制 两个方面来详细说明。


1. 数据存储流程

当一个文档通过 REST API 被写入 Elasticsearch 时,会经历以下流程:

1.1 接收请求
  • 用户通过 REST API 发送一个文档,指定索引名称(index)。
  • 数据被分配到相应的 主分片(Primary Shard)。
1.2 分片分配
  • Elasticsearch 根据索引配置,利用哈希值对文档 ID 进行路由,确定文档应存储在哪个分片上。
  • 分片可以分为主分片(Primary Shard)和副本分片(Replica Shard)。
1.3 文档处理

文档进入主分片后,Lucene 执行以下步骤:

  1. 倒排索引构建:
    • 将文档中的字段解析为词条(Terms)。
    • 创建倒排索引,将每个词条映射到包含该词条的文档 ID 列表。
  2. 存储正排索引:
    • 记录字段与文档的原始值,用于排序、聚合等功能。
  3. 数据压缩:
    • 使用压缩算法对文档存储结构优化,减少磁盘占用。
1.4 数据写入
  • 经过处理的数据被写入 Lucene Segment(段文件)。
  • 每次写入不会立即更新到磁盘,而是先写入内存中的缓冲区和 事务日志(translog)
1.5 刷新到磁盘
  • 定时(默认 1 秒)或手动触发刷新操作,将缓冲区中的数据刷新到磁盘,生成新的段文件(segment)。
  • 同时清空事务日志,保证持久化。
1.6 数据同步到副本分片
  • 主分片成功写入后,会将数据同步到副本分片。
  • 副本分片的作用是提供高可用性和查询负载分担。

2. 数据管理机制

2.1 Lucene 段(Segment)
  • Lucene 将数据存储在段文件(Segment)中,每个段文件是一个不可变的小型倒排索引。
  • 当有新的写操作时,会创建新的段文件,而不是直接修改旧的段。
  • 定期合并(Merge)段文件以减少段数量、优化查询性能。
2.2 Translog(事务日志)
  • 每次写操作都会先写入事务日志,作为一个临时缓冲区。
  • 在节点崩溃时,Elasticsearch 可以通过事务日志恢复未刷新的数据。
2.3 倒排索引
  • Elasticsearch 使用倒排索引快速定位包含某个词条的文档。

  • 示例:假设存储的文档包含以下内容:

    复制代码
    文档1:Elasticsearch 是一个分布式搜索引擎
    文档2:Elasticsearch 支持全文搜索

    倒排索引结构如下:

    复制代码
    词条      -> 文档列表
    Elasticsearch -> [1, 2]
    分布式    -> [1]
    搜索      -> [1, 2]
  • 通过倒排索引,Elasticsearch 可以快速查询到包含特定词条的文档。

2.4 正排索引
  • 用于支持聚合和排序操作。

  • 示例:如果有字段 price,正排索引会记录每个文档的 price 值:

    复制代码
    文档ID -> 值
    1      -> 100
    2      -> 200
2.5 分布式存储
  • 数据分片后被分配到集群中的多个节点上。
  • Elasticsearch 会自动平衡分片,并提供高可用性机制:
    • 主分片和副本分片分布在不同节点上。
    • 节点故障时,副本分片会升级为主分片。

总结:数据存储的核心机制

  • 写入流程: 数据从 REST 请求 -> 分片分配 -> Lucene 处理 -> 刷新到磁盘。
  • 管理机制:
    • Lucene 段文件管理数据,支持快速查询。
    • 事务日志保证数据可靠性。
    • 倒排索引和正排索引提供高效的全文搜索和排序聚合。
    • 分布式架构确保高可用性。

若有错误与不足请指出,关注DPT一起进步吧!!!

相关推荐
Hello.Reader8 小时前
Go-Elasticsearch v9 安装与版本兼容性
elasticsearch·golang·jenkins
mykyle10 小时前
Elasticsearch-ik分析器
大数据·elasticsearch·jenkins
SEO_juper12 小时前
企业级 AI 工具选型报告:9 个技术平台的 ROI 对比与部署策略
人工智能·搜索引擎·百度·llm·工具·geo·数字营销
Penge66619 小时前
Elasticsearch深度分页解决方案
elasticsearch
Penge66620 小时前
Elasticsearch match_phrase 查询 slop 参数详解文档
elasticsearch
Penge66620 小时前
Elasticsearch 中的 copy_to:一文掌握字段合并搜索的利器
elasticsearch
cts61820 小时前
全文检索官网示例
python·全文检索·fastapi
sibylyue1 天前
搜索引擎简介
搜索引擎
mykyle2 天前
Elasticsearch-8.17.0 centos7安装
大数据·elasticsearch·jenkins
躲在云朵里`2 天前
Git的使用
大数据·git·elasticsearch