您当前的位置: 首页 > 

Dongguo丶

暂无认证

  • 2浏览

    0关注

    472博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

57优化写入流程实现NRT近实时(filesystem cache,refresh)

Dongguo丶 发布时间:2021-11-15 21:02:15 ,浏览量:2

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

ES写入流程改进如下:

(1)数据写入buffer (2)每隔一定时间,buffer中的数据被写入segment文件,但是先写入os cache (3)只要segment写入os cache,那就直接打开供search使用,不立即执行commit

此时不会等待fsync将os cache中的数据刷到 os disk,而是index segment数据移到os cache中,就会立即打开,供search使用。

image-20211114203033535

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

image-20211114203230890

POST /my_index/_refresh,可以手动refresh,一般不需要手动执行,没必要,让es自己搞就可以了

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

PUT /my_index
{
  "settings": {
    "refresh_interval": "30s" 
  }
}
关注
打赏
1638062488
查看更多评论
立即登录/注册

微信扫码登录

0.0358s