Elasticsearch的原理是什么

发布时间:2021-10-28 16:16:32 作者:iii
来源:亿速云 阅读:263

本篇内容主要讲解“Elasticsearch的原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Elasticsearch的原理是什么”吧!

Lucene 和 ES

Lucene

Lucene 是 Elasticsearch所基于的 Java 库,它引入了按段搜索的概念:

对于一个 Lucene index 的组成,如下图所示:

Elasticsearch的原理是什么

ES

一个 Elasticsearch Index 由一个或者多个 shard(分片)组成。

Elasticsearch的原理是什么

而 Lucene 中的 Lucene index 相当于 ES 的一个 shard。

Elasticsearch的原理是什么

写入过程

写入过程 1.0(不完善)

写入过程 1.0 如下:

画图如下:

Elasticsearch的原理是什么

将文件刷新到磁盘是非常耗费资源的,而且在内存缓冲区和磁盘中间存在一个高速缓存(cache),一旦文件进入到 cache 就可以像磁盘上的 segment  一样被读取了。

写入过程 2.0

写入过程 2.0 如下:

画图如下:

Elasticsearch的原理是什么

数据从 buffer 到 cache 的过程是定期每秒刷新一次。所以新写入的 Document 最慢 1 秒就可以在 cache 中被搜索到。

而 Document 从 buffer 到 cache 的过程叫做 ?refresh。一般是 1 秒刷新一次,不需要进行额外修改。

当然,如果有修改的需要,可以参考文末的相关资料。这也就是为什么说 Elasticsearch 是准实时的。

使文档立即可见:

PUT /test/_doc/1?refresh {"test": "test"}  // 或者 PUT /test/_doc/2?refresh=true {"test": "test"}

Translog 事务日志

此处可以联想 MySQL 的 binlog,ES 中也存在一个 translog 用来失败恢复:

Elasticsearch的原理是什么

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

Elasticsearch的原理是什么

值得注意的是:

手动执行 flush:

POST /my-index-000001/_flush

删除和更新

segment 不可改变,所以 docment 并不能从之前的 segment 中移除或更新。

所以每次 commit, 生成 commit point 时,会有一个 .del 文件,里面会列出被删除的 document(逻辑删除)。

而查询时,获取到的结果在返回前会经过 .del 过滤。更新时,也会标记旧的 docment 被删除,写入到 .del  文件,同时会写入一个新的文件。

此时查询会查询到两个版本的数据,但在返回前会被移除掉一个。

Elasticsearch的原理是什么

segment 合并

每 1s 执行一次 refresh 都会将内存中的数据创建一个 segment。

segment 数目太多会带来较大的麻烦。每一个 segment 都会消耗文件句柄、内存和 cpu 运行周期。

更重要的是,每个搜索请求都必须轮流检查每个 segment ;所以 segment 越多,搜索也就越慢。

在 ES 后台会有一个线程进行 segment 合并:

说明合并完成时的活动:

Elasticsearch的原理是什么

物理删除:在 segment merge 这块,那些被逻辑删除的 document 才会被真正的物理删除。

到此,相信大家对“Elasticsearch的原理是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. Es(elasticsearch) 原理及使用
  2. 深入浅析ElasticSearch集群的原理

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

elasticsearch

上一篇:怎么解决Spring循环依赖问题

下一篇:Mysql数据分组排名实现的示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》