NDB Cluster 內部機制  /  NDB 通訊協定  /  操作與訊號

3.3 操作與訊號

在本節中,我們將討論資料節點和 API 節點之間,針對以下每個操作所進行的訊息傳遞順序

  • 主鍵查詢

  • 唯一鍵查詢

  • 資料表掃描或索引掃描

  • 交易的明確提交

  • 交易的回滾

  • 交易記錄處理 (取得與釋放)

主鍵查詢。使用主鍵查詢的操作執行方式如下圖所示

圖 3.1 主鍵查詢中交換的訊息

Content is described in the surrounding text.

注意

*+ 在此分別表示 零個或多個一個或多個

構成此過程的步驟在此處列出並更詳細地說明

  1. API 節點會將 TCKEYREQ 訊息傳送至資料節點。如果關於要使用之金鑰的必要資訊太大,無法包含在 TCKEYREQ 中,則訊息可以附帶任意數量的 KEYINFO 訊息,以攜帶其餘的金鑰資訊。如果操作使用了額外的屬性,並且超出 TCKEYREQ 中可用的空間,或者如果要將資料作為寫入操作的一部分傳送至資料節點,則這些屬性會隨 TCKEYREQ 一起以任意數量的 ATTRINFO 訊息傳送。

  2. 資料節點會根據操作成功或失敗,傳送訊息以回應請求

    • 如果操作成功,資料節點會將 TCKEYCONF 訊息傳送至 API 節點。如果請求是讀取操作,則 TCKEYCONF 會附帶包含實際結果資料的 TRANSID_AI 訊息。如果資料超過單個 TRANSID_AI 可以攜帶的資料量,則可能會傳送多個這類訊息。

    • 如果操作失敗,則資料節點會將 TCKEYREF 訊息傳回給 API 節點,並且在 API 節點提出新請求之前,不會再有其他訊號傳遞。

唯一鍵查詢。此操作的執行方式與主鍵查詢類似

  1. API 節點使用 TCINDXREQ 訊息發出請求,該訊息可以附帶零個或多個 KEYINFO 訊息、零個或多個 ATTRINFO 訊息,或兩者兼有。

  2. 資料節點會根據操作是否成功傳回回應

    • 如果操作成功,訊息為 TCINDXCONF。對於成功的讀取操作,此訊息可以附帶一個或多個攜帶結果資料的 TRANSID_AI 訊息。

    • 如果操作失敗,資料節點會傳回 TCINDXREF 訊息。

唯一鍵查詢中涉及的訊息交換如下圖所示

圖 3.2 唯一鍵查詢中交換的訊息

Content is described in the surrounding text.

資料表掃描和索引掃描。這些操作在許多方面與主鍵和唯一鍵查詢相似,如下所示

圖 3.3 資料表掃描或索引掃描操作交換的訊息

Content is described in the surrounding text.

  1. API 節點使用 SCAN_TABREQ 訊息以及零個或多個 ATTRINFO 訊息發出請求。如果使用界限,索引掃描也會使用 KEYINFO 訊息。

  2. 資料節點會根據操作是否成功傳回回應

    • 如果操作成功,訊息為 SCAN_TABCONF。對於成功的讀取操作,此訊息可以附帶一個或多個攜帶結果資料的 TRANSID_AI 訊息。但是,與基於主鍵或唯一鍵的查詢不同,通常需要從資料節點擷取多個結果。第一個請求之後的請求由 API 節點使用 SCAN_NEXTREQ 發出訊號,該訊息會告知資料節點傳送下一組結果 (如果還有更多結果)。如下所示

      圖 3.4 在資料表或索引掃描讀取操作之後擷取多個結果資料集

      Content is described in the surrounding text.

    • 如果操作失敗,資料節點會傳回 SCAN_TABREF 訊息。

      SCAN_TABREF 也用於向 API 節點發出訊號,表示已傳送讀取操作產生之所有資料。

提交和回滾交易。執行明確提交的過程遵循與先前顯示的相同一般模式。API 節點會將 TC_COMMITREQ 訊息傳送至資料節點,而資料節點會以 TC_COMMITCONF (成功時) 或 TC_COMMITREF (提交失敗時) 回應。如下圖所示

圖 3.5 明確提交操作中交換的訊息

Content is described in the surrounding text.

注意

某些操作會自動執行 COMMIT,因此並非每個交易都需要此操作。

回滾交易也遵循此模式。但是,在這種情況下,API 節點會將 TCROLLBACKTREQ 訊息傳送至資料節點。系統會傳送 TCROLLACKCONFTCROLLBACKREF 作為回應,如下所示

圖 3.6 回滾交易時交換的訊息

Content is described in the surrounding text.

交易記錄的處理。當 API 節點將 TCSEIZEREQ 訊息傳送至資料節點,並接收到 TCSEIZECONFTCSEIZEREF 作為回覆時,便會完成交易記錄的取得,這取決於請求是否成功。如下所示

Signals used in transaction record acquisition

交易記錄的釋放也使用請求-回應模式處理。在這種情況下,API 節點的請求包含 TCRELEASEREQ 訊息,而資料節點的回應則使用 TCRELEASECONF (表示已釋放記錄) 或 TCRELEASEREF (表示釋放嘗試失敗)。以下圖說明此一系列事件

Signals used in releasing a transaction record