4.9 DBTC 区块

这是事务协调器块,它在全局级别处理分布式事务和其他数据操作(与DBLQH 处理单个数据节点上的此类问题相反)。在源代码中,它位于 storage/ndb/src/kernel/blocks/dbtc包含以下文件的目录中:

  • Dbtc.hpp:定义 Dbtc类和关联的构造,包括以下内容:

    • 触发器和索引数据 (TcDefinedTriggerData)。  形成每个表的活动触发器列表的记录。这些记录由触发器池管理,触发器记录在触发器被激活时被捕获,触发器被停用时被释放。

    • 触发触发器数据 (TcFiredTriggerData)。  形成给定事务的触发触发器列表的记录。

    • 索引数据 (TcIndexData)。  该记录形成每个表的活动索引列表。此类记录由索引池管理,其中每条索引记录在创建索引时被占用,并在索引删除时释放。

    • API连接记录(ApiConnectRecord)。  API 连接记录包含应用程序连接到的连接记录。应用程序可以一次发送一个操作。它可以在发送前一个操作后立即发送一个新的操作。这意味着多个操作可以在事务协调器内的单个事务中处于活动状态,这是通过使用 API 连接记录实现的。每个活动操作都由 TC 连接记录处理;一旦 TC 连接记录将请求发送到本地查询处理程序,它就准备好接收新的操作。这 LQH连接记录负责等待操作完成;当连接记录上的操作完成时 LQH,可以在当前LQH 连接记录上启动新操作。ApiConnectRecord总是 256 字节对齐。

    • 事务协调器连接记录(TcConnectRecord)。  A TcConnectRecord) 保留进行交易所需的所有信息;交易控制器建立与执行交易所需的不同块的连接。每个活动事务可以有多个记录。TC 连接记录与 API 连接记录协作以与 API 节点通信,并与连接记录协作以与 LQH事务中涉及的任何本地查询处理程序通信。 TcConnectRecord) 永久连接到 中的一条记录 DBDICT和 中的另一条记录DIH,并包含一个活动 LQH连接记录列表和一个已启动(但当前不活动)的LQH连接记录列表。它还包含当前 TC 连接记录正在执行的所有操作的列表。 TcConnectRecord总是 128 字节对齐。

    • 缓存记录(CacheRecord)。  该记录用于 a 的接收 TCKEYREQ和发送之间 LQHKEYREQ(参见 第 3.3 节“操作和信号”)这是一个单独的记录,以提高缓存命中率并最小化内存存储需求。

    • 主机记录(HostRecord)。  该记录包含系统中每个节点的存活状态,并且是 128 字节对齐的。

    • 表记录(TableRecord)。  该记录包含系统中所有表的当前模式版本。

    • 扫描记录(ScanRecord)。  每次扫描都会分配一个ScanRecord来存储当前扫描的信息。

    • 数据缓冲区(DatabufRecord)。  这是一个用于一般数据存储的缓冲区。

    • 属性信息记录(AttrbufRecord)。  该记录可以包含一 (1) 个 ATTRINFO信号,其中包含一组 32 个属性信息字。

    • 全局检查点信息记录(GcpRecord)。  该记录用于在交易完成阶段存储全局检查点编号以及计数器。A GcpRecord是 32 字节对齐的。

    • TC 故障记录(TC_FAIL_RECORD)。  这在处理从失败的事务协调器接管 TC 职责时使用。

  • DbtcInit.cpp:处理索引和数据的分配和释放Dbtc(包括类析构函数)。

  • DbtcMain.cpp: 实现 Dbtc方法。

笔记

任何数据节点都可以充当事务协调器。

DBTC块作为 Dbtc类实现。

事务协调器是应用程序向其发送请求的内核接口。它与系统中的不同区块建立连接以执行交易,并决定哪个节点将处理每笔交易,向应用程序发送关于结果的确认信号,以便应用程序可以验证从 TUP 区块收到的结果是否正确。

该块还处理唯一索引,这些索引必须同时在所有数据节点之间进行协调。