当我提到向外扩展数据库系统时,我实际上只是讨论对数据库系统进行分割或划分,以便你能利用那些部分,把它们分配到单独的数据库服务器上。这允许你在许多服务器间分散处理能力,以适应不断扩张的增长。 GvDO ; A^M
@'w/`[
但是,额外的特性和功能需要更高的复杂程度。一个向外扩展的数据库很难进行设计或管理。在你成功对一个数据库系统实行向外扩展之前,你必须解决许多困难的商业和技术难题。 VVJo/{mM
r@ x/o(B
本文说明向外扩展数据库系统的两个选项,从而实现更高的可扩展性:水平数据划分和垂直数据划分。 #F2]|O
*=X Ux Dk
水平数据划分 9&-8 bM9}o
Qa+xp2Z
使用水平数据划分,数据库结构在数据库实例方面没有变化。通常,数据库之间唯一的不同在于实例包含的数据不同。 ptjE9O5
O+ F#3j5T
开发出中间层应用程序,使得实例间的数据得到适当维护,是这种解决方案的特点。可能很难决定如何在数据库实例间划分数据。数据分配方法十分关键,因为我们需要在不同服务器间比较平均地分散数据负载。不进行这种平均分割,你就无法取得向外扩展数据库的任何好处,因为查询或事务处理的大部分IO仍然只发生在一台服务器上。 E8kM@{v
&@ub<S#,
既然全部数据不再保存在一台服务器上,因此在必要时更难对所有数据执行查询。幸运的是,你可以建立分布式划分视图连接两个服务器实例间的数据,使得数据看起来就像保存在一台服务器上。有一些特殊的视图,它们利用连接的服务器和在数据表上建立的约束,有效地返回数据,就好像你只查询一台服务器上的数据一样。(我将在下周的文章中详细讨论分布式划分视图。) jJgY..2'
8-kc1 XI+
另外,值得一提的是,如果服务器处在不同的地理位置,它们的性能可能会受到影响。在这种情况下,你可能希望复制实例间的数据,以便每台服务器拥有完整的数据,但只负责维护特定的一块数据。