【愚公系列】2022年05月 .NET架构班 064-分布式中间件 Elasticsearch数据存储原理和结构

举报
愚公搬代码 发表于 2022/05/10 21:35:26 2022/05/10
【摘要】 一、Elasticsearch数据存储原理ES底层是基于Lucene,最核心的概念就是Segment(段),每个段本身就是一个倒排索引。ES中的Index由多个段的集合和commit point(提交点)文件组成。提交点文件中有一个列表存放着所有已知的段。 1.数据存储过程如下步骤如下:不断将 Document 写入到 In-memory buffer (内存缓冲区)。当满足一定条件后内存...

一、Elasticsearch数据存储原理

ES底层是基于Lucene,最核心的概念就是Segment(段),每个段本身就是一个倒排索引。

ES中的Index由多个段的集合和commit point(提交点)文件组成。

提交点文件中有一个列表存放着所有已知的段。

1.数据存储过程如下

步骤如下:

  1. 不断将 Document 写入到 In-memory buffer (内存缓冲区)。
  2. 当满足一定条件后内存缓冲区中的 Documents 刷新到 高速缓存(cache)。
  3. 生成新的 segment ,这个 segment 还在 cache 中。
  4. 这时候还没有 commit ,但是已经可以被读取了。

说明:

数据从 buffer 到 cache 的过程是定期每秒刷新一次。所以新写入的Document 最慢 1 秒就可以在 cache 中被搜索到。而 Document 从 buffer 到 cache 的过程叫做 ?refresh 。一般是 1 秒刷新一次,不需要进行额外修改。

2.数据写入防止丢失

步骤如下:

  1. Document 不断写入到 In-memory buffer,此时也会追加 translog。
  2. 当 buffer 中的数据每秒 refresh 到 cache 中时,translog 并没有进入到刷新到磁盘,是持续追加的。
  3. translog 每隔 5s 会 fsync 到磁盘。
  4. translog 会继续累加变得越来越大,当 translog 大到一定程度或者每隔一段时间,会执行 flush。

flush 操作会分为以下几步执行:

  1. buffer 被清空。
  2. 记录 commit point。
  3. cache 内的 segment 被 fsync 刷新到磁盘。
  4. translog 被删除。

说明:

translog 每 5s 刷新一次磁盘,所以故障重启,可能会丢失 5s 的数据。
translog 执行 flush 操作,默认 30 分钟一次,或者 translog 太大 (2G)也会执行。

2.数据存储过程完整结构图如下

在这里插入图片描述

二、Elasticsearch数据设计结构

  • Dcoument:数据在ES中的表现形式,类似json数据格式。
  • Index(数据库):Dcoument存储到这里
  • Index(查询):从Index进行查询

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。