前言

Elasticsearch 的近实时搜索是指文档的变化并不是立即对搜索可见,默认情况下会有 1s 的延迟。

原理

当有文档新增或者修改时,Elasticsearch 会先把这种变更记录到索引缓冲区(In-memory buffer)里。
image.png

Elasticsearch 每隔 1s 进行一次 refresh,refresh 会把索引缓冲区里记录的变更以段的格式刷新到文件系统缓存,并清空索引缓冲区里的记录。
image.png

只要文档变更到达文件系统缓存中,就可以像文件一样被打开和读取了,这也就意味着,文档的变更在此时可以体现在搜索结果中。文件系统缓存最后经过 fsync 被刷新到硬盘。

总结

索引缓冲区的作用是实现批量变更到文件系统缓存,批操作可以提高性能。文件系统缓存的引入是为了解决 fsync 的高昂代价(随机 I/O),如果每次索引一个文档都去执行一次 fsync(随机 I/O)的话会造成很大的性能问题,比如:文档变更更加耗时,以及需要更长时间才能体现在搜索结果中。

参考

https://www.elastic.co/guide/...


阿白
6 声望0 粉丝