Elasticsearch Refresh 与 Flush 操作

栏目: 编程工具 · 发布时间: 5年前

内容简介:一起认真学习大数据,

Elasticsearch Refresh 与 Flush 操作

本文来自51CTO博客, 文地址  https://blog.51cto.com/13981400/2402526

初次接触到这两个概念,估计都会觉得他们没什么差别,都是为了在操作索引之后让索引可以被实时性的搜索,不过它们还是有点不同的

Elasticsearch 底层依赖 Lucene,这里我们介绍下 Lucene 的 Segment, Reopen,Commit。

Segment、Reopen、Commit

Segment

在 ES 中,基本的存储单元是 shard(分片 ,但是在更底层的 Lucene 上稍微有点不同,ES 的每一个 shard 是 Lucene 的一个 index(索引 ,Lucene 的索引由多个 segment 组成,每个 segment 就是 ES 文档的倒序索引,里面包含了一些 term(词 的 mapping(映射

Elasticsearch Refresh 与 Flush 操作

当每个 ES 的文档创建的时候,都会写入一个新的 segment 中,因此每次写入的都是新的 segment,所以不需要修改之前的 segment。在删除文档的时候,只是在它属于的 segment 哪里标记为已删除就可,没有真正的从磁盘中抹除。更新也是同样的,只是在对应之前 segment 哪里标记为逻辑删除,然后新建一个新的 segment。

Reopen

Reopen 是为了让数据可以可以被搜索到,尽管这个时候数据可以被搜索到,但是不一定保证数据已经被持久化到磁盘中

Commit

Commit 就是为了让数据持久化,每一次的 Commit,不同 segment 的数据都会被持久化到磁盘中,虽然这样可以让数据更安全,但是每一次操作都会消耗系统资源,会有大量的 IO 操作

Translog

ES 在持久化的时候引入了一种新的方式,translog(transaction log ,一个文档被索引之后,就会被添加到内存缓冲区,并且追加到了 translog。

Elasticsearch Refresh 与 Flush 操作

Refresh 操作

默认情况下,ES 会每秒 refresh 一次,每次操作都会把内存缓冲区的内容拷贝到新创建的 segment 中去,这一步是在内存中操作的,这个时候新的文档就会被搜索了。也就是说 ES 是近实时性的搜索,差不多1s钟,才能让数据可以被搜索到。

Elasticsearch Refresh 与 Flush 操作

Flush 操作

Flush 操作意味着,所有在内存缓冲区的文档被写到新的 Lucene Segment 中,也就是所有在内存中的 segment 被提交到了磁盘,同时清除 translog。

Elasticsearch Refresh 与 Flush 操作

一般 flush 的时间间隔会比较久,默认30分钟,或者当 translog 达到了一定的大小,也会触发 flush 操作。

最后

简单来说,ES 的 refresh 操作是为了让最新的数据可以立即被搜索到。而 flush 操作则是为了让数据持久化到磁盘中,另外 ES 的搜索是在内存中处理的,因此 flush 操作不影响数据能否被搜索到

translog 一般在进行 flush 的时候被清空,一般在 fsync 和 commit 的时候被持久化到磁盘,默认的 translog 是在6.x版本以后,每次请求都会 fsync 到磁盘,不过有些 index.translog 的配置可以设置。

阅读完有所收获?欢迎分享本文给更多的小伙伴

Elasticsearch Refresh 与 Flush 操作

长按二维码 关注我 ↑

一起认真学习大数据, 预研新技术


以上所述就是小编给大家介绍的《Elasticsearch Refresh 与 Flush 操作》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Introduction to Tornado

Introduction to Tornado

Michael Dory、Adam Parrish、Brendan Berg / O'Reilly Media / 2012-3-28 / USD 23.99

Tornado is a scalable, non-blocking web server and web application framework written in Python. It is also light-weight to deploy, fun to write for, and incredibly powerful. Tornado was written with p......一起来看看 《Introduction to Tornado》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具