这是事务协调器块,负责处理分布式事务和其他数据操作,在全局级别(与 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)。
TcConnectRecord
) 保留执行事务所需的所有信息;事务控制器建立与执行事务所需的各个块的连接,并决定哪个节点将处理每个事务,并在结果上发送确认信号给应用程序,以便应用程序可以验证从 TUP 块接收到的结果是否正确。每个活动事务可能有多个记录。TC 连接记录与 API 连接记录协作以与 API 节点进行通信,并与LQH
连接记录协作以与事务中涉及的任何本地查询处理程序进行通信。TcConnectRecord
) 永久连接到DBDICT
中的一条记录以及DIH
中的另一条记录,并包含活动LQH
连接记录列表以及已启动(但当前未处于活动状态)的LQH
连接记录列表。它还包含使用当前 TC 连接记录执行的所有操作的列表。TcConnectRecord
始终与 128 字节对齐。缓存记录 (CacheRecord)。 此记录用于接收
TCKEYREQ
和发送LQHKEYREQ
之间(请参阅 第 3.3 节,“操作和信号”)。这是一个单独的记录,以便提高缓存命中率并最大限度地减少内存存储要求。主机记录 (HostRecord)。 此记录包含系统中每个节点的 “活动” 状态,并与 128 字节对齐。
表记录 (TableRecord)。 此记录包含系统中所有表的当前架构版本。
扫描记录 (ScanRecord)。 每次扫描都会分配一个
ScanRecord
来存储有关当前扫描的信息。数据缓冲区 (DatabufRecord)。 这是一个用于通用数据存储的缓冲区。
属性信息记录 (AttrbufRecord)。 此记录可以包含一个 (1)
ATTRINFO
信号,其中包含一组 32 个属性信息字。全局检查点信息记录 (GcpRecord)。 此记录用于在事务完成阶段存储全局检查点号以及计数器。
GcpRecord
与 32 字节对齐。TC 故障记录 (TC_FAIL_RECORD)。 这是在处理从失败的事务协调器接管 TC 职责时使用的。
DbtcInit.cpp
: 处理Dbtc
索引和数据的分配和释放(包括类析构函数)。DbtcMain.cpp
: 实现Dbtc
方法。
任何数据节点都可以充当事务协调器。
DBTC
块实现为 Dbtc
类。
事务协调器是应用程序向其发送请求的内核接口。它建立与系统中各个块的连接以执行事务,并决定哪个节点将处理每个事务,在结果上发送确认信号给应用程序,以便应用程序可以验证从 TUP 块接收到的结果是否正确。
此块还处理唯一索引,这些索引必须在所有数据节点上同时协调。