手动刷新refresh
refresh
1.es数据写入的流程
对于任何数据库的写入来讲fsync刷盘虽然保证的数据的安全但是如果每次操作都必须fsync一次,那fsync操作将是一个巨大的操作代价,在衡量对数据安全与操作代价下,ES引入了一个较轻量的操作refresh操作来避免频繁的fsync操作。
2.什么是refresh
写入document时,首先被写入内存缓存(in-memory index buffer),默认每间隔1秒将内存缓存中的文档生成一个segument(段),并清空in-memory index buffer,segument变为可读状态。但是未提交
segument会先写入文件系统缓存,保证segument文件可以被正常打开和读取,后续再进行刷盘操作
es并不是文档写入后马上就可以搜索到的,而是一个近乎实时的搜索(默认1s后)
文档写入后,处于searchable状态,仍然是未提交状态
每1秒生成一个新的segument(段)的过程就叫做refresh
3.手动执行refresh
-- 全局索引
POST /_refresh
-- refresh指定索引
POST /blogs/_refresh
4.设置refresh的时间间隔
PUT /my_logs
{
"settings":{
"refresh_interval":"30s" // 设置每30s进行一次refresh
}
}
5.refresh特点
refresh资源消耗相对小,避免每次fsync导致资源上的瓶颈
refresh后的segument可以被打开,实现近实时搜索
原创:做时间的朋友