导出 (0) 打印
全部展开

Azure SQL Database 中的联合

更新时间: 2014年4月

Microsoft Azure SQL Database (Azure SQL Database) 中的联合是一种提高可扩展性和管理应用程序的数据库层中的容量限制的方式。一个数据库中的一个或多个表将水平分区到多个数据库(称为“联合成员”)中。这种类型的水平分区通常称为“分片”。本主题概述了联合。

Important重要提示
联合的当前实现将随 Web 和企业版一起停用。请考虑部署自定义分片解决方案,来最大限度地提高可伸缩性、灵活性和性能。有关自定义分片的详细信息,请参阅向外扩展 Azure SQL Database

联合 是由联合分发方案定义的数据库分区集合,称为“联合方案”。联合方案定义了一个联合分发键,该键可确定联合内部各分区之间的数据分发。联合分发键必须是 INT、BIGINT、UNIQUEIDENTIFIER 或 VARBINARY(最多 900 字节)类型并指定一个范围值。一个联合只能有一个联合方案和一个联合分发键。

联合内部的数据库分区称为“联合成员”,且每个成员包含联合分发键的数据类型涉及的值范围的部分或全部。联合表 是分布在联合成员中的表。每个联合成员具有各自的架构,并包含与联合成员的范围相对应的联合表行。联合成员中与某个特定联合键值相匹配的所有行的集合称为“联合原子单元”。每个联合成员都可以包含多个联合原子单元。一个联合成员也可以“引用表”,引用表不是识别联合的表。引用表完全包含于一个成员中,且通常包含与联合数据一起检索的引用信息。

联合成员在其包含的数据与存储在其他成员中的数据之间提供了物理分隔。每个联合成员都具有自己的架构,此架构可以根据成员特定的处理(如执行跨所有成员的滚动架构升级)暂时从其他成员的架构中分离出来。

当将联合成员以物理方式作为数据库实现时,将在应用程序层上作为一系列联合键值来以逻辑方式引用这些成员。例如,对于一个包含与联合键值 50-100 关联的行的联合成员数据库,可通过指定此范围内的某个键值就可以对其进行逻辑访问,而不用通过指定数据库名称来实现访问。

可通过表示联合的应用程序边界的联合根 数据库来访问联合。联合根数据库将用作应用程序的逻辑端点来连接到某个联合。这个过程可通过根据指定的联合键值将连接路由到合适的联合成员来实现。每个根数据库可包含多个联合,且每个联合都具有自己的联合架构。根数据库还可以包含全局数据,例如,用户、密码、角色或其他的应用程序特定的数据。

下图显示了联合的逻辑模型和物理模型:

设计联合时,一个最重要的设计决策就是选择要联合的值。在理想情况下,你希望选择一个允许你从多个相关的表联合数据的键,以便将相关的行存储在一起。例如,对于多租户应用程序,你可以选择 tenant_id。每个联合表内指定同一 tenant_id 值的行将存储在同一联合原子单元中。

你必须还考虑如何插入新记录以便均匀地利用每个成员,而不是将所有的新记录存储在一个成员中。还必须确定如何在应用程序层向各个联合成员分发新数据。

由于不同的联合成员中包含的数据存在物理分隔,而且 SQL Database 不支持跨数据库的联接操作,因此你的应用程序必须实现用于联接多个联合成员或多个联合中的数据的逻辑。例如,一个需要联接两个联合中的数据的查询将需要对每个联合执行单独的查询并在应用程序中联接数据。这同样适用于聚合一个联合中的多个分片的数据的情况,例如获取联合中包含的所有行的计数。

描述用于数据分片的其他 SQL 功能的一个新规范现在在 Microsoft 开放规格承诺下提供。有关详细信息,请参阅 Azure SQL Database 联合规范。

另请参阅

显示:
© 2014 Microsoft