参考
优化点
- 1pc优化:单分片事务可以优化为本地事务
- 并行prepare:并行是天然的,关键是事务记录和intent的并行。每个分片有一个cache,记录分片上所有的读写过的key。对于读操作遇到了inten就去cache中查事务记录,事务记录不存在就会等待;如果存在,但是没有对应的持久化数据说明已经commit。
- 异步resolve:事务记录改为commi后,就返回客户端,intent异步提交
- 日志复制&执行:仅在leader做计算,raft日志只需要简单的写
- 并行提交:针对多分片事务,也达到1pc。并行prepare,同时,事务记录中记录所有的key。事务已提交的标志就是所有的key都已经prepare成功。
- 事务流水线:针对交互式事务(crdb自己识别出来)。raft还没有apply就返回客户端,最后提交的时候去查之前的prepare是否都成功。