1.5 应用层划分

Ndb_cluster_connection对于在单个应用程序 中实例化表示到不同管理服务器的连接的多个对象没有限制,也没有限制 使用它们来创建Ndb类的多个实例。这些 Ndb_cluster_connection对象(以及 Ndb基于它们的实例)甚至不需要连接到同一个集群。

例如,完全有可能以这样一种方式执行 应用程序级数据分区,即满足一组标准的数据使用一个对象移交到一个集群,该对象利用表示与该集群的连接的对象,而不满足这些标准(或者可能是一组不同的标准)的数据可以通过使用指向第二个集群的不同 Ndb 实例发送到不同的集群。 NdbNdb_cluster_connectionNdb_cluster_connection

可以扩展此场景以开发访问任意数量集群的单个应用程序。但是,在这样做时,必须牢记以下条件和要求:

  • 集群管理服务器 ( ndb_mgmd ) 可以连接到一个且只有一个集群,而无需重新启动和重新配置,因为它必须从配置文件 ( config.ini) 中读取数据,告诉它哪些数据节点组成集群。

  • Ndb_cluster_connection对象 属于 ”单个管理服务器,其主机名或 IP 地址用于实例化该对象(作为参数传递connection_string 其构造函数);一旦对象被创建,它就不能用于启动到不同管理服务器的连接。

    (请参阅 Ndb_cluster_connection 类构造函数。)

  • Ndb使用此连接 ( ) 的对象Ndb_cluster_connection不能重新用于连接到不同的集群管理服务器(因此连接到构成集群的不同数据节点集合)。任何给定的实例 在创建时Ndb都绑定到一个特定的 实例,而这个实例在实例化时又绑定到一个唯一的管理服务器。 Ndb_cluster_connectionNdb_cluster_connection

    (请参阅Ndb 类构造函数。)

  • Ndb前面描述的绑定在所讨论的和 Ndb_cluster_connection对象 的生命周期内持续存在。

因此,在设计和实现任何在单个会话中访问多个集群的应用程序时,必须实例化一组单独的Ndb_cluster_connectionNdb对象以连接到每个集群管理服务器,并且不会混淆其中的哪一个用于访问哪个 NDB Cluster。

同样重要的是要记住, 不同集群之间不可能直接共享”数据或数据节点。一个数据节点只能属于一个集群,集群之间的任何数据移动都必须在应用程序级别完成。

有关演示如何在单个应用程序中建立和使用两个不同集群的示例,请参阅 第 2.5.3 节,“使用同步事务和多集群的 NDB API 示例”第 3.6.2 节,“MGM API 事件处理与多个集群”