阿里GTS原理分析

xiaoxiao2021-02-28  78

txc_undo_log 表模型

CREATE TABLE `txc_undo_log` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',

  `gmt_create` datetime NOT NULL COMMENT '创建时间',

  `gmt_modified` datetime NOT NULL COMMENT '修改时间',

  `xid` varchar(100) NOT NULL COMMENT '全局事务ID',

  `branch_id` bigint(20) NOT NULL COMMENT '分支事务ID',

  `rollback_info` longblob NOT NULL COMMENT 'LOG',

  `status` int(11) NOT NULL COMMENT '状态',

  `server` varchar(32) NOT NULL COMMENT '分支所在DB IP',

  PRIMARY KEY (`id`),

  KEY `unionkey` (`xid`,`branch_id`)

) ENGINE=InnoDB AUTO_INCREMENT=211225994 DEFAULT CHARSET=utf8 COMMENT='事务日志表';

 

 

db的事务级别:读未提交

限制:

不支持事务的嵌套,聚合函数支持不是很好

不支持线下开发使用,只能在线上使用,因为需要diamond

 

java端使用

使用@TxcTransaction来代替spring的@Transactional,相当于自己做了事务控制,这样就可以控制事务,以标识当前事务是否操作成功(类似2PC)

 

插入txc_undo_log

gts_sample1 减20

gts_sample2 增20

成功时提交“本次事务”

 

失败时,发送回滚消息

 

 

从操作日志中,可以看到对sql语句做了分析,记录了操作前后的值

status中标志

 

在txc-client.jar中也有parser sql部分

 

 

这个是从binlog分析器查看

 

 

最后这篇文章推荐大家看看: https://www.zhihu.com/question/53496602

全文pdf: https://pan.baidu.com/s/1hr8t97u 

 

转载请注明原文地址: https://www.6miu.com/read-71626.html

最新回复(0)