TiDB实现跨表事务的原理是什么啊?

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:v4.0.8
  • 【问题描述】:
    TiDB实现跨表事务的原理是什么啊?
    比如我有这样一个事务:
    start transaction;
    update table1 set amount = 100 where id = 1;
    update table2 set amount = 200 where id = 2;
    commit;
    个人理解,TiDB中每张表可能有多个region,但是每个region只记录一张表的数据,也就是说上面两条sql需要修改两个不同的region,一个单独的region有raft组来保证数据一致性和高可用性,但如果在一个事务中操作多个region,怎么保证每个region都成功或者都失败呢?

TiDB 事务是参照 Percolator 论文实现的

具体可以参考下这个博客
https://andremouche.github.io/tidb/transaction_in_tidb.html