分布式事务 Seata 教程 - undo_log、global_table、branch_table、lock_table字段及作用详解

Seata 是一个开源的分布式事务解决方案,它使用 AT(Automatic Transaction)模式来实现分布式事务的一致性。在 Seata 中,有四个主要的数据库表用于记录事务的状态和相关信息:undo_logglobal_tablebranch_tablelock_table。下面我将详细介绍这些表的字段及其作用。

1. global_table

global_table 表用于存储全局事务的信息。全局事务是指分布式事务中的顶级事务,它管理着整个分布式事务的生命周期。

主要字段:
  • xid: 全局事务ID,由 Seata 生成,唯一标识一个全局事务。
  • transaction_id: 事务ID,与 xid 相关联,用于内部引用。
  • status: 事务状态,例如:BEGINCOMMITTINGROLLED_BACK 等。
  • application_id: 应用程序ID,标识发起全局事务的应用。
  • transaction_service_group: 事务服务组名,标识 Seata 集群。
  • timeout: 超时时间,单位毫秒。
  • begin_time: 开始时间,单位毫秒。
  • application_data: 应用层数据,用于存储应用程序特定的数据。

2. branch_table

branch_table 表用于存储分支事务的信息。分支事务是指在一个全局事务中参与的具体操作,每个数据库操作都是一个分支事务。

主要字段:
  • branch_id: 分支事务ID,由 Seata 生成,唯一标识一个分支事务。
  • xid: 关联的全局事务ID。
  • resource_group_id: 资源组ID,标识资源组。
  • resource_id: 资源ID,标识资源。
  • lock_key: 锁键,用于锁定资源的键值。
  • status: 分支事务状态,例如:STARTINGUNKNOWSUCCESS 等。
  • client_id: 客户端ID,标识客户端。
  • application_data: 应用层数据,用于存储应用程序特定的数据。

3. undo_log

undo_log 表用于记录分支事务中的修改前后的数据状态,以备回滚时使用。

主要字段:
  • branch_id: 关联的分支事务ID。
  • xid: 关联的全局事务ID。
  • context: 上下文信息,包含序列化后的上下文数据。
  • rollback_info: 回滚信息,包含序列化后的回滚数据。
  • log_status: 日志状态,例如:REDORETRYSUCCESS 等。
  • log_created: 创建时间戳。
  • log_modified: 修改时间戳。
  • ext: 扩展信息,用于存储额外的数据。

4. lock_table

lock_table 表用于存储锁定信息,确保分支事务在执行过程中不会发生并发冲突。

主要字段:
  • row_key: 行键,唯一标识被锁定的行。
  • xid: 关联的全局事务ID。
  • transaction_id: 事务ID,与 xid 相关联。
  • branch_id: 关联的分支事务ID。
  • resource_id: 资源ID。
  • table_name: 表名。
  • pk: 主键。
  • value: 锁定值。
  • is_locked: 是否锁定,1 表示已锁定。
  • lock_created: 创建时间戳。
  • lock_expired: 锁超时时间戳。

小结

  • global_table 用来记录全局事务的状态和基本信息。
  • branch_table 用来记录分支事务的状态和相关信息,以及与全局事务的关联。
  • undo_log 用来记录分支事务在提交之前的数据变更,以便在事务失败时可以恢复数据。
  • lock_table 用来记录事务执行过程中的锁定信息,防止并发冲突。

通过这些表的配合工作,Seata 能够有效地管理和协调分布式事务,保证了事务的一致性。如果你需要更详细的配置指南或者代码示例,请告知我。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值