ES文档写入原理
根据上图,我们再回顾一下写入的一个流程。
1.客户端首先写入到内存缓冲区MemoryBuffer以及备份的磁盘空间Translog当中。
2.MemoryBuffer定期refresh内部的数据,组成一个个的Segment组,如果segement太大也会进行合并操作,之后当满足一定的条件或者时间规则之后会刷新进入到OS Cache当中,之后segement会修改为open状态。 (所以数据写入是有延迟的,open标记只针对Cache和Memory Buffer的交互)
3.OS Cache同步写入到磁盘当中,写入完成之后会清空Memory Buffer以及Translog当中的数据。
4.如果中途断电了,会通过Translog进行数据同步恢复,其中Memory Buffer先同步Translog的数据,然后依次执行上述步骤,保证数据一致性。