阿里GTS原理分析

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 


 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值