ElastichSearchelasticsearch玩转大数据

六十六、Elasticsearch内核原理-优化写入流程,实现N

2017-07-12  本文已影响143人  编程界的小学生

1、疑问
每次都必须等待fsync将segment刷入磁盘,才能将segment打开供search使用,这样的话,从一个document写入,到他可以被搜索到,可能会超过1分钟,这就不是近实时搜索了。只要瓶颈在于fsync实际发生磁盘IO写数据到磁盘,是很耗时间的。

2、写入流程改进如下

(1)数据写入buffer

(2)每隔一定时间(最慢1s),buffer中的数据被写入index segment文件,但是先写入os cache

(3)只要segment写入os cache,那就直接打开供search使用,不立即执行commit

数据写入os cache,并被打开供搜索的过程,叫做refresh,默认是每隔1秒refresh一次,也就是说,每隔一秒就会将buffer中的数据写入一个新的index segment file,县写入os cache中,所以ES是近实时的,数据写入到可以被搜索默认是1s。

Paste_Image.png

比如说,我们现在的时效性要求比较低,只要求一条数据写入ES,一分钟以后才让我们搜索到就可以了,那么就可以调整refresh interval

PUT my_index
{
  "settings": {
    "refresh_interval": "1m"
  }
}

若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:


qrcode_for_gh_577b64e73701_258.jpg
上一篇下一篇

猜你喜欢

热点阅读