1.5 應用程式層級分割

在單一應用程式中,建立代表連線到不同管理伺服器的多個 Ndb_cluster_connection 物件,或使用這些物件來建立 Ndb 類別的多個執行個體,並無任何限制。這些 Ndb_cluster_connection 物件(以及基於它們的 Ndb 執行個體)甚至不需要連線到同一個叢集。

例如,完全有可能執行資料的應用程式層級分割,以這樣的方式,符合一組條件的資料會交給一個叢集,使用一個 Ndb 物件,該物件使用一個 Ndb_cluster_connection 物件,代表連線到該叢集,而不符合那些條件(或可能是另一組條件)的資料,則可以透過使用 Ndb_cluster_connection 指向第二個叢集的另一個 Ndb 執行個體,傳送到不同的叢集。

可以擴展此情境,以開發一個可以存取任意數量叢集的單一應用程式。然而,在這樣做時,必須牢記以下條件和要求:

  • 叢集管理伺服器 (ndb_mgmd) 只能連線到一個叢集,而無需重新啟動和重新設定,因為它必須從組態檔案 (config.ini) 讀取資料,告知它哪些資料節點組成叢集。

  • Ndb_cluster_connection 物件屬於單一管理伺服器,該伺服器的主機名稱或 IP 位址用於建立此物件(作為 connection_string 引數傳遞到其建構函式);一旦物件建立,它就不能用於啟動連線到不同的管理伺服器。

    (請參閱Ndb_cluster_connection 類別建構函式。)

  • 使用此連線 (Ndb_cluster_connection) 的 Ndb 物件無法重複使用以連線到不同的叢集管理伺服器(因此無法連線到組成叢集的不同資料節點集合)。任何給定的 Ndb 執行個體在建立時會繫結到特定的 Ndb_cluster_connection,而該 Ndb_cluster_connection 又在建立時繫結到單一且唯一的管理伺服器。

    (請參閱Ndb 類別建構函式。)

  • 先前描述的繫結在相關的 NdbNdb_cluster_connection 物件的生命週期內持續存在。

因此,在設計和實作任何在單一工作階段中存取多個叢集的應用程式時,務必為連線到每個叢集管理伺服器建立個別的 Ndb_cluster_connectionNdb 物件,且不得混淆使用哪個物件來存取哪個 NDB 叢集。

同樣重要的是要記住,不同的叢集之間不可能直接共用資料或資料節點。一個資料節點只能屬於一個叢集,且叢集之間的所有資料移動都必須在應用程式層級完成。

如需示範如何在單一應用程式中建立和使用連線到兩個不同叢集的範例,請參閱第 2.5.3 節:「使用同步交易和多個叢集的 NDB API 範例」,以及第 3.6.2 節:「使用多個叢集的 MGM API 事件處理」