CockroachDB分布式事务解析

事务层

事务层实现了对并发操作的ACID事务支持。

  • CRDB事务分为两个阶段:

    • write & reads,即事务执行阶段,当进行写操作时,CRDB并不会直接对硬盘的数据进行修改,而是使用另外两个东西来进行辅助,这两个东西也避免了锁的使用:

    • Transaction record,存储在range第一个被修改的key处,表明了修改当前key的事务所处的状态:PENDINGCOMMITTED或者ABORTED。第一个状态表示事务正在进行;第二个状态表示事务已经提交;第三个表示事务已经丢弃,正在进行重试或者rollback。

  • Write intents,对数据的修改写在这里,此外还带一个指向transaction record的指针,来表明这些数据当前或者之前被一个事务修改过,其他事务根据这个状态来决定对这些数据的下一步操作。产生一个新的write intent前需要检查这一块数据有没有更晚时间戳的提交值,如果有的话该事务需要被重新开始。

当进行读操作时,会检查所读的每块数据的write intent,如果不存在,那么直接读以前的mvcc数据就行了,如果有write intent,那么需要判断intent的状态,根据状态做出下一步操作。

  • Commit,提交阶段,如果事务执行阶段没有问题,那么事务就可以直接进行提交,如果中途出现问题就会abort,然后进行重试或者rollback。

  • Cleanup,这个阶段不属于事务中,主要是用来解

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值