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 对象 属于 一个单独的管理服务器,该服务器的 hostname 或 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 事件处理:使用多个集群”