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