我在Elasticsearch中阅读了很多关于索引刷新的文章.我理解大于0的不同间隔的含义,即连续段刷新之间经过的时间,使它们可用于搜索.但是,我不确定究竟refresh_interval: -1是什么.根据我的理解,它是一种禁用自动索引刷新但不完全禁用的方法.即使refresh_interval设置为-1,Elasticsearch仍会不时刷新段.我想知道如果禁用自动刷新,哪个机制会控制此刷新活动.
对不起,我知道我没有很多代码要发布,所以我将介绍一下我所追求的内容.我的应用程序不需要近实时搜索; 它只需要最终的一致性.然而,这种可能性应该是合理的,即在几秒到不到一分钟内,而不是半小时.我想知道我是否可以将它留给Elasticsearch来决定何时最好在方便时刷新而不是定期刷新.原因是禁用自动刷新确实为我的应用程序带来了性能方面的一些好处,例如JVM堆大小使用在垃圾收集间隔之间不那么积极地增加(见下图)
And*_*fan 30
你的理解有点混乱.刷新索引并写入磁盘是两个不同的过程,并不一定相关,因此即使refresh_interval是-1 ,您仍然可以查看有关段的信息.
索引文档时,会将其添加到内存缓冲区并附加到translog文件.当进行刷新时,缓冲区中的文档将被写入新段,而不使用fsync,将打开该段以使其可见以进行搜索并清除缓冲区.该超越对尚未清除,并没有什么实际保存在磁盘上(因为没有fsync).
现在想象一下刷新没有发生:没有索引刷新,你无法搜索你的文档,这些段不是在缓存中创建的.
此处的设置将指示何时发生刷新(写入磁盘).默认情况下,当translog的大小达到512mb时,或者30分钟后.这实际上是在磁盘上保存数据,其他所有内容都在文件系统缓存中(如果节点死机或重新启动计算机,则缓存丢失并且translog是唯一的救赎).
默认情况下,index.refresh_interval 设置为 1s。实际上,这在 ES 中可以称为昂贵的操作,尤其是在索引时。您可以注意到,当您增加 refresh_interval 时。
通过将 index.refresh_interval 设置为 -1 意味着您正在禁用它,并且在索引到 ES 时可以给您带来显着的收益。您只需要禁用 refresh_interval (完成索引数据后再次启用它)
curl -XPUT "http://localhost:9200/$INDEX_NAME/_settings" -d '{ "index" : { "refresh_interval" : "-1" }}'
#index data......
curl -XPUT "http://localhost:9200/$INDEX_NAME/_settings" -d '{ "index" : { "refresh_interval" : "1s" }}'
Run Code Online (Sandbox Code Playgroud)
并且您可以在索引后根据您的要求设置适当的值以确保一致性。一篇有用的文章:- https://sematext.com/blog/2013/07/08/elasticsearch-refresh-interval-vs-indexing-performance/
希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
12075 次 |
| 最近记录: |