摘要
討論 NDB Cluster 和 NDB API 中交易處理和傳輸的機制,以及用於實作這些機制的物件。
當使用 NdbTransaction::execute()
傳送交易時,它們不會立即傳輸到 NDB 核心。相反地,交易會保存在它們所屬的 Ndb
物件的特殊傳送列表(緩衝區)中。適應性傳送演算法會決定何時應將交易實際傳輸到 NDB 核心。
NDB API 設計為多執行緒介面,因此通常希望同時從多個執行緒傳輸資料庫操作。NDB API 會追蹤哪些 Ndb
物件正在主動將資訊傳輸到 NDB 核心,以及預期與 NDB 核心互動的執行緒數。請注意,Ndb
的特定實例最多應在一個執行緒中使用;不同的執行緒不應共用相同的 Ndb
物件。
將資料庫操作從 Ndb
物件緩衝區傳輸到 NDB 核心有四種條件:
NDB 傳輸器(TCP/IP 或共享記憶體)判斷緩衝區已滿並將其傳送出去。緩衝區大小取決於實作方式,並且可能會在 NDB Cluster 版本之間變更。當 TCP/IP 為傳輸器時,緩衝區大小通常約為 64 KB。由於每個
Ndb
物件會為每個資料節點提供單一緩衝區,因此「已滿」緩衝區的概念對於每個資料節點而言都是本地的。累積傳輸資訊的統計資料可能會強制將緩衝區傳送至所有儲存節點(也就是說,當所有緩衝區都滿時)。
每 10 毫秒,一個特殊的傳輸執行緒會檢查是否發生任何傳送活動。如果沒有,則該執行緒會強制傳輸到所有節點。這表示資料庫操作在被分派之前最多會等待 20 毫秒。NDB Cluster 未來的版本可能會採用 10 毫秒的限制;比這更頻繁的檢查需要作業系統的額外支援。
對於受適應性傳送演算法影響的方法(例如
NdbTransaction::execute()
),有一個force
參數可以覆寫其在這方面的預設行為,並強制立即傳輸到所有節點。如需詳細資訊,請參閱個別的 NDB API 類別清單。
以上列出的條件可能會在 NDB Cluster 未來的版本中變更。