1.4.4 適應性傳送演算法

摘要

討論 NDB Cluster 和 NDB API 中交易處理和傳輸的機制,以及用於實作這些機制的物件。

當使用 NdbTransaction::execute() 傳送交易時,它們不會立即傳輸到 NDB 核心。相反地,交易會保存在它們所屬的 Ndb 物件的特殊傳送列表(緩衝區)中。適應性傳送演算法會決定何時應將交易實際傳輸到 NDB 核心。

NDB API 設計為多執行緒介面,因此通常希望同時從多個執行緒傳輸資料庫操作。NDB API 會追蹤哪些 Ndb 物件正在主動將資訊傳輸到 NDB 核心,以及預期與 NDB 核心互動的執行緒數。請注意,Ndb 的特定實例最多應在一個執行緒中使用;不同的執行緒應共用相同的 Ndb 物件。

將資料庫操作從 Ndb 物件緩衝區傳輸到 NDB 核心有四種條件:

  1. NDB 傳輸器(TCP/IP 或共享記憶體)判斷緩衝區已滿並將其傳送出去。緩衝區大小取決於實作方式,並且可能會在 NDB Cluster 版本之間變更。當 TCP/IP 為傳輸器時,緩衝區大小通常約為 64 KB。由於每個 Ndb 物件會為每個資料節點提供單一緩衝區,因此「已滿」緩衝區的概念對於每個資料節點而言都是本地的。

  2. 累積傳輸資訊的統計資料可能會強制將緩衝區傳送至所有儲存節點(也就是說,當所有緩衝區都滿時)。

  3. 每 10 毫秒,一個特殊的傳輸執行緒會檢查是否發生任何傳送活動。如果沒有,則該執行緒會強制傳輸到所有節點。這表示資料庫操作在被分派之前最多會等待 20 毫秒。NDB Cluster 未來的版本可能會採用 10 毫秒的限制;比這更頻繁的檢查需要作業系統的額外支援。

  4. 對於受適應性傳送演算法影響的方法(例如 NdbTransaction::execute()),有一個 force 參數可以覆寫其在這方面的預設行為,並強制立即傳輸到所有節點。如需詳細資訊,請參閱個別的 NDB API 類別清單。

以上列出的條件可能會在 NDB Cluster 未來的版本中變更。