image.png

实时搜索: 刚刚添加的数据立马就能查询出来就是实时搜索
准实时搜索:ElasticSearch是准实时搜索,

1 溢写到文件系统缓存

ElasticSearch当数据写入到ES分片时,会首先写入到内存中,此时数据还不能被客户端查询出来,
每隔一秒种(ES中默认1秒,refresh一次),然后通过内存的buffer生成一个segment(小文件),并刷到文件系统缓存中,数据可以被客户端检索到(注意不是直接刷到磁盘)

当然,如果在Memory buffer刷到File system cache的过程中宕机了怎么办?还有Translog功能来保障容错.

2 写translog保障容错

ElasticSearch在写入数据到内存中的同时,也会记录translog日志,将你对每个index的delete update bulk请求操作都保存到translog里面,translog在磁盘上

在refresh期间出现异常,会根据translog来进行数据恢复
等到文件系统缓存中的segment数据都刷到磁盘中,清空translog文件

3 flush到磁盘

ES默认每隔30分钟会将File system cache 文件系统缓存的数据刷入到磁盘

4 segment合并

Segment太多时,ES定期会将多个segment合并成为大的segment,减少索引查询时IO开销,此阶段ES会真正的物理删除(之前执行过的delete的数据)