这几天看到青云开源了一个分布式数据库,radon
初略看了一下,是sharding+xa事务的思路
之前对xa事务了解的不多,趁此机会看了一下mysql 5.7的xa事务(mysql 5.7的innodb 支持xa事务)
分为内部xa和外部xa
外部xa:mysql充当rm,tm由外部协调者充当
内部xa:mysql既是rm,又是tm(内部xa需要存储引擎支持表处理维度的二阶段提交,目前只有innodb做到)
分为
xa start xid
...sql 语句
xa end xid
xa prepare xid
xa commit xid/xa rollback xid
xa recover 用于查询之前prepare未commit或者rollback的xid
5.7后prepare的xid会进行持久化,机器重启后仍然存在(如果有主从,mysql会确保复制给从)
当然应用层需要把响应的xid持久化,用来做错误修复