一般人们会选择纵向扩展(scale up)SQL Server数据库而非横向扩展(scale out)纵向扩展很容易增加硬件处理能力内存磁盘和提高网络速度其原理就是仍然在一台服务器上运行数据库但是增加了服务器的处理能力和资源这种方法很昂贵但是非常简单直接
采用云技术
有时候最简单的方法就是将问题交由其他人处理微软的Windows Azure云服务包含一个基于云的SQL Server版本SQL Azure这在技术上并非真正意义的横向扩展因为它是一种无限纵向扩展方法所以转移到Azure并不需要对您的应用程序进行大改动实际上您只需要将应用程序迁移到SQL Azure然后支付存储处理和数据传输费用这些都是收费服务但是您不需要再担心扩展问题
复制
SQL Server原生复制是一种支持横向扩展的解决方案与数据库的创建和使用方式有关您只需要在多台服务器上复制多个数据库副本然后将不同的用户指向各台服务器这种方法通常最适合支持地理位置分散的用户如亚洲办公室的用户使用服务器而北美办公室的用户则使用服务器每一台服务器都拥有完整的数据副本并且会复制伙伴服务器的所有修改
这种方法不支持自动负载均衡并且最适合用在用户固定只使用一部分数据的情况换而言之如果亚洲用户只需要编辑与他们办公室相关的数据例如主要是亚洲客户的信息那么复制能够保证其他数据库副本也包含这些记录的副本如果所有用户都需要编辑完整的数据集那么复制就变得有一些复杂因为SQL Server必须在支持用户的同时编辑位于不同服务器的同一个数据
SQL Server的合并复制能够处理这种沖突但是您必须进行一些自定义合并编程这意味着您的开发人员必须开发一些算法确定用户并发访问数据时谁获取编辑权限客户应用程序也需要增加编程;使它们不仅向数据库提交数据修改也要循环检查这些修改是否被其他并发用户重写用户也需要重新培训因为客户端应用程序可能会提示"您正在编程的数据已经发生变化您需要重新检查确定您的编辑是否仍然有效"
联合数据库
另一个重要的横向扩展方法是联合通过这种方法您可以将数据库划分到多台服务器上垂直分割将同一个表的不同行保存到不同的服务器上同时地理分区是最常用的方法将所有亚洲数据记录保存在一台服务器上而所有欧洲数据则保存在另一台服务器上这种方法不同于整体复制每一个位置的服务器都不具备完整的数据库而只拥有该位置的数据通过实现一种SQL Server分布式分区视图而形成完整的表用户就可以浏览一个"联合"或组合的数据视图水平分割则将表的字段保存在不同的服务器上因此各台服务器一起协作构成组合的表
这些数据库的创建并不简单其中涉及一种整体操作您需要掌握关于数据访问和使用的详细信息才能够实现正确的部署此外您还需要一位SQL Server数据库架构师他应该全面理解这些技术分析您的业务情况并且能够正确地创建这些组件
在一些情况中实现这种横向扩展对客户端应用程序的改动很小对于本身在设计上大量使用视图和存储过程进行数据访问的应用程序更是如此因为这些元素只是是在后台抽象在客户端上不会发生变化但是这些应用程序并不常见;通常实现横向扩展都需要修改客户端程序使客户端与后台结构分离
横向扩展并不简单
毫无疑问实现SQL Server横向扩展非常复杂这也是Azure等云数据库系统流行的原因之一此外有一些第三方供应商能够帮助实现横向扩展技术而不需要完全依赖SQL Server的原生特性您需要自己下功夫了解这些方法理解数据访问和使用方法这样才能够选择最符合您要求的方法