Elasticsearch 的 refresh 和 flush 的区别

发布于 2021-06-02 13:03:10 字数 1045 浏览 1148 评论 0

一、refresh 操作

当我们向 ES 发送请求的时候,我们发现es貌似可以在我们发请求的同时进行搜索。而这个实时建索引并可以被搜索的过程实际上是一次es 索引提交(commit)的过程,如果这个提交的过程直接将数据写入磁盘(fsync)必然会影响性能,所以es中设计了一种机制,即:先将 index-buffer 中文档(document)解析完成的 segment 写到 filesystem cache 之中,这样避免了比较损耗性能 io 操作,又可以使 document 可以被搜索。以上从 index-buffer 中取数据到 filesystem cache 中的过程叫做 refresh。

refresh 操作可以通过 API 设置:

POST /index/_settings
{"refresh_interval" : "10s"}

Elasticsearch 默认的 refresh 间隔时间是 1s,这也是为什么 ES 可以进行近乎实时的搜索。

当我们进行大规模的创建索引操作的时候,最好将将 refresh 关闭。

{"refresh_interval" : "-1"}

二、flush 操作与 translog

我们可能已经意识到如果数据在 filesystem cache 之中是很有可能在意外的故障中丢失。这个时候就需要一种机制,可以将对 Elasticsearch 的操作记录下来,来确保当出现故障的时候,保留在 filesystem 的数据不会丢失,并在重启的时候可以从这个记录中将数据恢复过来。Elasticsearch 提供了 translog 来记录这些操作。

当向 elasticsearch 发送创建 document 索引请求的时候,document 数据会先进入到 index buffer 之后,与此同时会将操作记录在 translog 之中,当发生 refresh 时(数据从 index buffer 中进入 filesystem cache 的过程)translog 中的操作记录并不会被清除,而是当数据从 filesystem cache 中被写入磁盘之后才会将 translog 中清空。而从 filesystem cache 写入磁盘的过程就是 flush。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

已经忘了多久

文章 0 评论 0

15867725375

文章 0 评论 0

LonelySnow

文章 0 评论 0

走过海棠暮

文章 0 评论 0

轻许诺言

文章 0 评论 0

信馬由缰

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文