Elasticsearch中refresh和flush的区别是什么
2017-09-25 00:00
232 查看
摘要: Elasticsearch中refresh和flush的区别是什么
在ES中, 要保证被索引的文档能够立即被搜索到, 有两种方法:_refresh 或者_flush。
那么二者的区别是什么呢?要搞懂这个问题, 就需要对ES中文档的索引过程有个了解。
我们知道ES的索引数据是写入到磁盘上的。但这个过程是分阶段实现的,因为IO的操作是比较费时的。
当一个文档进入ES的初期, 文档是被存储到内存里的,默认经过1s之后, 会被写入文件系统缓存,这样该文档就可以被搜索到了,注意,此时该索引数据被没有最终写入到磁盘上。如果你对这1s的时间间隔还不满意, 调用_refresh就可以立即实现内存->文件系统缓存, 从而使文档可以立即被搜索到。
所以refresh实现的是文档数据从内存到文件系统缓存的过程。
再来看flush,flush是用于translog的。
ES为了数据的安全, 在接受写入的文档的时候, 在写入内存buffer的同时, 会写一份translog日志,从而在出现程序故障/磁盘异常时, 保证数据的完整和安全。flush会触发lucene commit,并清空translog日志文件。 translog的flush是ES在后台自动执行的,默认情况下ES每隔5s会去检测要不要flush translog,默认条件是:每 30 分钟主动进行一次 flush,或者当 translog 文件大小大于 512MB主动进行一次 flush。对应的配置是index.translog.flush_threshold_period 和 index.translog.flush_threshold_size
需要指出的是, 从ES2.0开始,每次 index、bulk、delete、update 完成的时候,一定触发flush translog 到磁盘上,才给请求返回 200 OK。这个改变提高了数据安全性,但是会对写入的性能造成不小的影响。在写入效率优先的情况下,可以在 index template 里设置如下参数:"index.translog.durability":"async" 和 "index.translog.sync_interval":30s (默认是5s)。
参考:
1. http://stackoverflow.com/questions/19963406/refresh-vs-flush 2.https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-translog.html
3. http://kibana.logstash.es/content/elasticsearch/principle/realtime.html
在ES中, 要保证被索引的文档能够立即被搜索到, 有两种方法:_refresh 或者_flush。
那么二者的区别是什么呢?要搞懂这个问题, 就需要对ES中文档的索引过程有个了解。
我们知道ES的索引数据是写入到磁盘上的。但这个过程是分阶段实现的,因为IO的操作是比较费时的。
当一个文档进入ES的初期, 文档是被存储到内存里的,默认经过1s之后, 会被写入文件系统缓存,这样该文档就可以被搜索到了,注意,此时该索引数据被没有最终写入到磁盘上。如果你对这1s的时间间隔还不满意, 调用_refresh就可以立即实现内存->文件系统缓存, 从而使文档可以立即被搜索到。
所以refresh实现的是文档数据从内存到文件系统缓存的过程。
再来看flush,flush是用于translog的。
ES为了数据的安全, 在接受写入的文档的时候, 在写入内存buffer的同时, 会写一份translog日志,从而在出现程序故障/磁盘异常时, 保证数据的完整和安全。flush会触发lucene commit,并清空translog日志文件。 translog的flush是ES在后台自动执行的,默认情况下ES每隔5s会去检测要不要flush translog,默认条件是:每 30 分钟主动进行一次 flush,或者当 translog 文件大小大于 512MB主动进行一次 flush。对应的配置是index.translog.flush_threshold_period 和 index.translog.flush_threshold_size
需要指出的是, 从ES2.0开始,每次 index、bulk、delete、update 完成的时候,一定触发flush translog 到磁盘上,才给请求返回 200 OK。这个改变提高了数据安全性,但是会对写入的性能造成不小的影响。在写入效率优先的情况下,可以在 index template 里设置如下参数:"index.translog.durability":"async" 和 "index.translog.sync_interval":30s (默认是5s)。
参考:
1. http://stackoverflow.com/questions/19963406/refresh-vs-flush 2.https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-translog.html
3. http://kibana.logstash.es/content/elasticsearch/principle/realtime.html
相关文章推荐
- Elasticsearch中refresh和flush的区别是什么
- elasticsearch中 refresh 和flush区别
- elasticsearch中 refresh 和flush区别
- flush , shutdownOutput, close有什么区别
- Control.Invalidate, Control.Update and Control.Refresh 有什么区别
- hibernate的flush()、refresh()、clear()针对一级缓存的操作的区别
- 堆和栈有什么区别:
- C,C++,C#,Java?这些有什么区别?
- javascript与Java有什么区别
- <jsp:include>和<%@include file=""%>有什么区别?
- ADT bundle和Eclipse和Android Studio有什么区别---安卓初步
- 两者在理论基础上有什么区别?在模式识别中的应用有什么不同之处(应用的方面有什么不同)?
- 什么是数据仓库及其与传统型关系数据库的区别
- Connection: close(http协议短链接)和Connection: keep-alive(http协议长链接)有什么区别?
- 浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
- javascript:; 和 javascript:void(0); 的区别是什么?
- hibernate的各种保存方式的区别 (save,persist,update,saveOrUpdte,merge,flush,lock)等
- px、dp和sp,这些单位有什么区别?
- Application中的Context和普通的Activity中的Context有什么区别呢?
- 转linux read/write和fread/fwrite有什么区别