17 文档写入内核级原理(过程)
ElasticSearch的Index底层结构
ES中,index 由多个shard组成。每个shard,实际上是一个Lucene index。
在Lucene中,它的每个index,由多个segment组成。每个segment内部,实际上是若干个倒排索引。
ES数据写入的流程:
(1)每当有一个doc的写入请求到来后,doc数据先写入ES内存的buffer缓冲和translog日志文件
(2)每隔一秒钟,buffer中的数据被写入新的segment file,并立刻进入os cache。然后把segment file加到Commit point中,并打开此segment,供search使用
(3)buffer被清空
(4)重复1~3,新的segment不断添加到Commit Point中,buffer不断被清空,而translog中的数据不断累加
(5)当translog长度达到一定程度的时候,commit操作发生:
因为执行commit时候,buffer中可能会有数据,因此需要先把这部分数据生成segment,并保存下来
(5-1)buffer中的所有数据写入一个新的segment,并写入os cache,打开供使用
(5-2)buffer被清空
(5-3)一个commit ponit被写入磁盘,标明了所有的index segment
(5-4)filesystem cache中的所有index segment file缓存数据,被fsync强行刷到磁盘上
(5-5)现有的translog被清空,创建一个新的translog
流程