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一起进步吧!!!

相关推荐
IT成长日记4 小时前
Elasticsearch安全加固指南:启用登录认证与SSL加密
安全·elasticsearch·ssl
Elasticsearch5 小时前
现在支持通过 EDOT Collector 在 Kubernetes 上动态发现工作负载
elasticsearch
GOTXX9 小时前
BoostSiteSeeker项目实战
前端·c++·后端·mysql·搜索引擎·项目实战·boost
mooyuan天天12 小时前
黑帽SEO之搜索引擎劫持-域名劫持原理分析
搜索引擎·seo搜索引擎劫持·seo域名劫持
上等猿1 天前
Elasticsearch笔记
java·笔记·elasticsearch
qq_5470261791 天前
Elasticsearch 评分机制
大数据·elasticsearch·jenkins
yangmf20401 天前
私有知识库 Coco AI 实战(一):Linux 平台部署
大数据·linux·运维·人工智能·elasticsearch·搜索引擎·全文检索
Elastic 中国社区官方博客1 天前
Elasticsearch:理解政府中的人工智能 - 应用、使用案例和实施
大数据·人工智能·elasticsearch·机器学习·搜索引擎·ai·全文检索
Elasticsearch1 天前
RAG vs. Fine Tuning ,一种实用方法
elasticsearch
Elasticsearch1 天前
了解可观察性指标:类型、黄金信号和最佳实践
elasticsearch