(1) 分布式数据库面临的问题
分布式数据库系统需要解决与单个服务器数据库系统不同的一些问题的复杂性。大多数这类问题主要由以下几个原因产生:
● 部分服务器失败
与单个服务器系统不同,分布式系统中一个服务器计算机失败仅影响部分数据库系统。如果一个更新操作涉及几个结点,而其中之一失败,则要采用一些方法来检测失败并在其它结点采取适当的措施。
● 低速和高速费用通信
远程结点之间的通讯通常是在广域网或通信线路上完成的。与局域网上的单个服务器系统不同,通讯可能是分布式系统的瓶颈。大量的通讯开销主要体现在响应时间和通讯费用上。正因为如此,在调用分布式查询的优化算法并计算最有效的存取路径时,应把潜在的通信开销作为一个重要的因素。分布式的表复制功能是降低通讯开销的有效手段之一。
● 额外的管理开销
由于分布式系统的每个服务器都有它自己的一组系统目录表和系统结构设置,因此对于分布式系统的管理会比单个服务器的管理复杂。
(2) 分布透明性
分布式数据库要求数据的物理位置对于应用程序本身来说是透明的(即它们对于应用程序和用户屏蔽)。数据在多个服务器上的移动或重分布不要求应用程序本身有任何变化。
(3) 结点自治性
结点自治意味着分布式数据库系统中的每个数据库分别进行管理并与网络中其它数据库独立。
(4) 全局命名空间
如果分布式查询和更新要引用两个或多个服务器上的数据,那么必须能唯一地辩别查询或更新语句中的每一个元素,因此必须有一个命名模式来保证服务器之间的数据名不重复。这个全局唯一命名的要求有时被称为全局命名空间。通常用下列方法保证命名唯一:
● 增加位置前缀:对数据库对象的引用可以通过一个前缀来限定,该前缀唯一地确定包含该对象的服务器的名称。
● 使用本地同义词:本地同义词是在本地为远程场地的数据建立的别名。
(5) 分布式查询
多个服务器的分布式查询是分布式数据库支持的最普通、最基本的功能。除了能把查询分布于多个服务器上之外,数据库服务器软件还必须包括以下特性:
● 分布式查询优化
查询优化方法应考虑到远程服务器之间传送数据而产生的通信开销和费用。
● 分布式死锁检测
如果数据库服务器使用锁来实现数据库查询操作的话,那么,在多个远程服务器之间就要有一个分布式死锁检测机制,该机制的任务是检测和解决由于锁的相互竞争而产生的死锁。
(6) 分布式更新
与多个服务器的分布式查询一样,分布式更新也引出许多新课题。数据库服务器软件必须包括以下特性:
● 分布式死锁检测
在多个远程服务器之间要有一个分布式死锁检测机制,该机制能够检测和解决由于更新(该更新引进排它锁的竞争)而出现的死锁。
● 两阶段提交
两阶段提交是指协调在一个分布式更新操作中涉及到的服务器之间的动作。
对所有这些特性的支持应由数据库服务器软件完成,而不应由应用程序开发者完成。修改一个物理上分布的数据库应该与修改一个驻留在一个单一数据库服务器上的数据库在操作和应用程序上没有差别。
(7) 数据复制和分布
为了减少通讯开销,在某一服务器上的某些表中的数据应能被复制分布到其它远程数据库服务器结点上。这样就可以引用复制的数据与本地表在本地完成分布式查询操作,否则,本地表将需要传送到其它结点,增大了网络传输开销。复制数据也提高了分布式数据库的容错性,因为当一个远程数据库失败后,某些查询还能由本地复制表完成。
如果复制的数据只用于查询而不被更新,那么任何一个数据库服务器都能保存复制数据。有些数据库服务器还提供自动的建立和周期地刷新本地表复制数据(有时称为快照)的功能,这使得分布式数据更容易维护和管理。某些服务器使用特定的日志文件(称为快照日志)自动地更新所有的数据复制版,这些日志文件保存了自上次更新以来表中所发生的变化。这种只更新所发生的修改而不是更新整张表的方法,能够大大减少为保持多个复制版本数据状态的同步所要求的通信费用和开销。
如果修改操作是发生在复制版上,那么被改变的值(插入和删除)必须传送到所有有该数据拷贝的结点上,这时,就需要有并发和数据完整性控制手段,因为不同结点上的用户可能企图同时更新存贮在不同复制表中的相同记录。正因为如此,通常不允许直接对复制表进行更新。
|