elasticsearch 事务日志 sync 都干了些什么?

what

本质上就是把generation和它所属的ops位置的关联信息写到写到.ckp文件中。

上图表示新建doc过程的文件变化 – 

首先把doc1写入lucene的索引文件,其实只写到了操作系统的page cache。

然后再把index(doc1)写入tlog文件(已落盘)

最后一步就是sync,蓝色部分是sync前的状态,它表示最近提交的generation=5,跟此gen关联的ops有两个,其实位置在第80个字节,如果sync后,.ckp将更新opsnum=3,offset=80+index(doc1)

why

如果不去sync会咋样?如果在上图的状态下掉电的话,看看会发生什么事情 — lucene中的doc1没了,服务重启后,找到最新的generation=5,然后通过offset=80找到了对应的ops1和ops2。

index(doc1)被忽略了,虽然它就在ops2后面。当index(doc2)插进来,会从offset=80开始写。。。

这也是Es可能会丢数据的根源!!! — tlog日志没有同步到ckp

转载于:https://www.cnblogs.com/forestwang/p/6731720.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值