写在前面
本文看下分片相关概念,segment,merge,refresh等。
1:segment,commit point,.del
一个倒排索引的文件称为segment,多个segment组合在一起就是lucene的index,也就是es的shard。在lucene中有一个文件叫做commit point,用来记录所有segment的信息。删除的数据并不会真正删除,而是记录在.del文件,参考下图:
2:refresh,transaction log
写入文档时并不会直接写入到segment中,而是同时会写入到index buffer(内存)
和transaction log(磁盘,数据不丢失)
中,然后index buffer中的数据,默认每隔1秒(refresh.index_interval配置)
刷新到segment中,这个操作叫refresh,但不执行fsync,refresh后数据就可以被搜索到了(这也是为什么es被称为近实时搜索系统)
。具体参考下图们:
- 1
- 2
3:flush
强制落盘操作,index buffer会写入segment,并会fsync,transaction log也会清空,默认30分钟执行一次,具体如下图:
4:merge
将多个segment合并为1个的操作,如下: