设计分布式分区视图

当您要设计一组分布式分区视图来实现数据库服务器联合时,需要考虑以下方面:

  • 确定应用程序执行 SQL 语句的模式

  • 确定表间的关系。

  • 使 SQL 语句的使用频率与分析外键时所定义的分区相匹配。

  • 定义 SQL 语句路由规则。

应用程序执行 SQL 语句的模式

开发应用程序在通常的处理期间执行的 SQL 语句的列表。将列表划分为 SELECT、UPDATE、INSERT 和 DELETE 几类,并在每一类中按执行频率排序。如果 SQL 语句引用存储过程,则从存储过程使用基本的 SELECT、INSERT、UPDATE 和 DELETE 语句。如果正对现有 SQL Server 数据库进行分区,可以使用 SQL Server Profiler获得这种列表。

对于使用 SQL 语句的频率,建议以产生使分布式分区视图最有效的典型联机事务处理 (OLTP) 或网站数据库中的合理近似值为准。这些系统的特点是,与决策支持或 OLAP 系统中的查询类型相比,各 SQL 语句检索的数据量相对较少。当各 SQL 语句引用的数据量较少时,只需研究系统中每个语句生成的数据流量合理近似值的频率。然而,很多系统都有一些引用大量数据的 SQL 语句组。可能需要采取额外的措施加大这些查询的权重,以反映其较大量数据要求。

表的关系

目的是找到可以在同一维度(如部件编号或部门编号)上进行分区的表群集,这样与该维度的各个匹配项相关的所有行都在同一个成员服务器上结束。例如,可能决定按区域对数据库进行分区。若要支持此功能,即使是键中没有区域号的表也必须能够以某种与区域相关的方式被分区。在这样的数据库中,即使“客户”表没有区域号列,但如果将区域定义为整个州、省、市或自治区集合,则 Customer.StateProvince 列可用来以某种与区域相关的方式对客户进行分区。

因为显式和隐式外键定义了表间的关系,所以在查找分区数据的方法时,它们是考察的主要元素。研究显式外键定义,确定查询通常如何使用一个表中的行来查找另一个表中的行。还要研究隐式外键,或 SQL 语句在联接操作中使用一个表中的行值引用另一个表中行的方式,即使在没有明确的外键定义时也要研究。因为数据库架构中没有显式定义隐式外键,所以必须考察由应用程序生成的 SQL 语句,了解是否有使用非键列联接表的语句。为了提高联接性能,通常要为这些隐式外键创建索引。因此,还应查看数据库中定义的索引。

SQL 语句分区的频率

使 SQL 语句的使用频率与分析外键时所定义的分区相匹配。选择最支持应用程序的混合 SQL 语句的分区方式。如果可以多种方式对某些表集进行分区,则通过 SQL 语句的使用频率确定哪些分区满足的 SQL 语句数目最多。SQL 语句引用最频繁的表就是要最先分区的表。根据引用表的频率排列对表进行分区的优先顺序。

SQL 语句模式也影响是否对表进行分区:

  • 如果引用表的语句中有 5% 以上是 INSERT、UDATE 或 DELETE 语句,则应对表进行分区,而且可以在选定的维度上对表进行分区。

  • 如果 INSERT、UPDATE 或 DELETE 语句在引用表的语句中不足 5%,则应在每个成员服务器上维护表的完整副本。还必须定义更新表的所有副本的方式。如果要求高度的事务完整性,可以对触发器进行编码,使其在分布式事务的上下文中执行所有副本的分布式更新。如果不要求高度的事务完整性,可以使用 SQL Server 复制机制之一将更新从表的一个副本传播到所有其他副本。

  • 如果引用表的语句中有 5% 以上是 INSERT、UDATE 或 DELETE 语句,则不要对表进行分区或复制,并且无法在选定的维度上对表进行分区。

SQL 语句路由规则

路由规则必须能够定义哪个成员服务器可以最有效地处理各 SQL 语句。它们必须建立用户输入的上下文和成员服务器之间的关系,该成员服务器包含完成语句所需的大部分数据。应用程序必须能够获得用户输入的某个数据块,并将它与路由规则进行匹配以确定哪个成员服务器应处理 SQL 语句。