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)。  TcConnectRecord) 保留執行交易所需的所有資訊;交易控制器建立與執行交易所需的不同區塊的連線。每個作用中的交易可以有多個記錄。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 區塊接收的結果是否正確。

此區塊也處理唯一索引,必須同時跨所有資料節點進行協調。