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 能够有效地管理和协调分布式事务,保证了事务的一致性。如果你需要更详细的配置指南或者代码示例,请告知我。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐