一、流程图
二、流程分析
1、写入数据时,同时写入内存的buffer缓冲区和translog日志文件。
2、刚写入buffer中的数据不能被查询,buffer缓冲区每隔1s刷新refresh到segment file保存到操作系统缓存os cache中(这也是ES近实时原因)同时更新commit point,此时数据才能被查询;
3、translog日志文件也在缓存中,也需要经过os cache再写入磁盘,每隔5s写入磁盘一次(宕机后最多丢失5s数据)。
4、每隔30min或者translog足够大时,会强行flush,将segmentfile写入磁盘,然后清空translog文件。此时os cache中的数据也会为空
5、当segment太多时,os cache中会自动定期的将多个segment合并成一个大的segment,合并后将多余的文件del掉,实现真正意义的删除操作。普通的删除只是逻辑删除。
三、提问:
1、为什么要写入translog日志文件中,通过tanslog记录来恢复和记录日志,而不是每5s直接将数据写入磁盘。translog日志文件每5s写入磁盘也需要消耗性能啊
2、flush刷盘时,buffer中的缓存是先refresh到os cache中还是等待flush完毕后再进行
3、commit point的作用?
四、待更新
。。。