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
网友评论