这是事务协调器块,它在全局级别处理分布式事务和其他数据操作(与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 区块收到的结果是否正确。
该块还处理唯一索引,这些索引必须同时在所有数据节点之间进行协调。