您当前的位置: 首页 > 

Dongguo丶

暂无认证

  • 2浏览

    0关注

    472博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

56图解剖析document写入原理(buffer,segment,commit)

Dongguo丶 发布时间:2021-11-15 21:01:46 ,浏览量:2

创建document的过程

(1)数据写入buffer

image-20211114195150890

(2)达到一定条件、或者每隔一段时间会执行commit point (3)buffer中的数据写入新的index segment

在es底层,用的是lucene,lucene底层的index是分为多个segment的,每个segment都会存放部分数据。

image-20211114200113188

(4)等待在os cache中的index segment被fsync强制刷到磁盘上

首先会写入os cache缓存中,然后fsync强制刷新cache到disk

image-20211114200046442

(5)新的index sgement被打开,供search使用

当index sgement被fsync强制刷到磁盘上以后,就会被打开,供search使用,而且执行fsync以后,还会降buffer清空

(6)buffer被清空

image-20211114200302515

当index segment被打开以后,search操作就可以到index segment中去搜索了

image-20211114200520707

当内存buffer缓冲再次被写满时,会写到一个新的index segment中,再次执行之前的操作,直到执行fsync以后,将buffer清空

image-20211114201043599

当新的index segment被打开以后,search操作就可以到新index segment中去搜索了

image-20211114201154986

删除document的过程

如果是删除操作,每次commit point时,会有一个.del文件,标记了哪些segment中的哪些document被标记为deleted了

image-20211114201516898

如果搜索请求过来,在index segment中,匹配到了id=1的doc,此时会发现再.del文件中已经被标识为deleted了,这种数据就会被过滤掉,不会作为搜索结果返回,

更新document的过程

如果是更新操作,实际上是将现有的doc标记为deleted,然后将新的document写入新的index segment中,下次search时可能会匹配到一个document的多个版本,但是之前的版本已经被标记为deleted了,所以只会返回最新版本的doc

一个document的多个版本,但是之前的版本已经被标记为deleted了,所以只会返回最新版本的doc

关注
打赏
1638062488
查看更多评论
立即登录/注册

微信扫码登录

0.0362s