4.9 DBTC块

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

  • Dbtc.hpp:定义Dbtc类和相关构造,包括以下:

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

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

    • 索引数据(TcIndexData)。该记录形成了每个表的活动索引列表。这些记录由索引池管理,在索引池中,每当创建索引时捕获每个索引记录,并在删除索引时释放索引记录。

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

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

    • 缓存记录(CacheRecord)。此记录用于接收TCKEYREQ发送LQHKEYREQ(见3.3节“操作和信号”)这是一个单独的记录,以提高缓存命中率,以及最大限度地减少内存存储需求。

    • 主机记录(HostRecord)。此记录包含活着系统中每个节点的状态,以128字节对齐。

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

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

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

    • 属性信息记录(attrbuffrecord)。该记录可以包含一个(1)ATTRINFO信号,它包含一组32个属性信息词。

    • 全局检查点信息记录(GcpRecord)。在事务完成阶段,该记录用于存储全局检查点号以及一个计数器。一个GcpRecord32字节对齐。

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

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

  • DbtcMain.cpp:实现Dbtc方法。

请注意

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

DBTC块实现为Dbtc类。

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

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