从分布式数据库结构入手讲解它的前世今生

来源:岁月联盟 编辑:zhuzhu 时间:2007-07-11

分布式数据库是在上世纪7O年代中期,随着各企业、团体和单位对数据库更广泛地使用以及数据库技术和计算机网络发展成熟而产生的。

 

由于分布式数据库克服了集中式数据库的许多缺点,并且自然地适应于许多单位地理上分散而逻辑上统一的组织结构,因此,20多年以来从理论到实践都得到了迅速发展,并取得了决定性成果。

 

分布式数据库结构

 

分布式数据库的典型定义是:分布式数据库是一个数据集合,这些数据在逻辑上属于同一个系统,但物理上却分散在计算机网络的若干站点上,并且要求网络的每个站点具有自治的处理能力,能执行本地的应用。每个站点的计算机还至少参与一个全局应用的执行。

 

所谓全局应用,要求使用通讯子系统在几个站点存取数据。这个定义强调了分布式数据库的两个重要特点:分布性和逻辑相关性。

 

图1给出了典型的分布式数据库系统(DDBS)的物理结构。其中在不同地域的3台计算机分别控制本地数据库及各终端用户T;每台计算机及其本地数据库组成了此分布式数据库的一个站点,各站点用通讯网络连接起来,可以是局域网或广域网。

 

图2给出了分布式数据库的逻辑结构。其中,DDBMS是分布式数据库管理系统,用来支持分布式数据库的建立和维护。LDBMS是局部数据库管理系统,也就是通常的集中式数据库管理系统,用来管理本站的数据。

 

 

DDBS的工作原理

 

DDBMS是分布式数据库系统的核心部分,就其性质可分为匀质和异质两种。若每个站点的LDBMS相同,则是匀质的;若至少有两个LDBMS不同,则是异质的。

 

异质DDBMS要在不同LDBMS的不同数据模型间进行转换,因而比匀质DDBMS更复杂。一般来说,若从头开始研制一个DDBS,则选择匀质较方便,且通常都选用关系模型。这是由于关系模型易于分布管理,但若DDBS是建立在已有的若干数据库之上,则这些数据库很可能有的是基于关系模型的,有的是基于层次或网络模型的,即它们是不同质的,因此要建立异质的DDBMS。

 

图3给出了分布式数据库管理系统DDBMS的工作原理的参考模型。

 

用户处理器根据外模式和概念模式把用户命令翻译成格式更适合于机器的规范化命令,并实施完整性约束,同时它负责将规范化格式的数据转换成用户结果格式。

 

数据处理器根据概念模式和内模式选择通向物理数据的最优或近乎最优的访问路径,用规范化命令翻译成物理命令,并发执行物理命令,并送回结果。它还负责将物理数据转换成规范化数据。 这一部分功能通常由LDBMS完成。

 

全局数据库控制和通讯系统的组成如图4所示。分解器根据分布模式负责将来自用户处理器的规范化命令翻译成一个分布执行策略,指明各数据处理器应完成的命令。分布式执行监测器负责分布策略的正确执行以及保证分布环境中事务的原子性。通讯子系统负责在网络的各计算面站点问传输命令和数据。局部执行监视器负责监视执行分布策略中的本地部分。合并器把来自几个数据处理器的结果组合起来,形成最终结果。

 

此参考模型支持了DDBMS的4个特性:响应时间快和费用低,结构独立性,位置独立性以及并发和重复的独立性。

 

各站点计算机的自治程度也是分布式数据库系统的一个重要特性。它与分解器和分布执行监视器所处的位置密切相关。若分解器和分布式执行监视器处在外部模式以上,这时分布模式实际只存在于程序员的脑海之中,是一种由程序员来联系的系统。若它们处在外部模式以下概念模式以上,则是联邦式DBMS。若它们处在概念模式以下内部模式以上(如图3),则称为紧耦合的分布式DBMS。若它们在内模式以下,则是集中式DBMS的体系结构。分解器和分布式执行监视器所处的位置越往下,站点的自治能力越弱。

 

 

DDBMS技术

 

图5给出了DDB的参考体系结构。分布式数据库设计包括外模式、全局模式、分段模式、分配模式和各站点内模式的定义。

 

设计应考虑到下述目标:提高处理的本地性以提高响应速度和降低处理成本;提高数据的可用性和可靠性;合理地分布工作负荷以提高并行处理的能力等。

 

将关系分段的方法有水平分段(叉分简单水平分段和诱导水平分段),垂直分段和混合分段。设计分段时应该遵守完整性约束规则,重构性条件规则和不相交性条件规则。

 

复制副本的方法可以提高数据的可用性和可靠性以及处理的局部性。但对副本要加以控制,使得对用户是透明的,即对用户来说好象只存在一个副本一样。一般来说,查询只需对一个副本进行;而更新则要对所有副本进行,这使得更新的算法变得复杂。

 

 

目录管理

 

分布式数据库的目录中存放了系统为保证正确而有效地访问数据而要使用的全部信息。一般应包括各级模式的描述、访问方法的描述、关于数据库的统计数据和一致性信息等。系统根据这些信息将用户查询转换为物理数据库上的查询,并进行查询优化选择一条最佳的存取路径,进行事务管理,进行安全性和完整性检查等。

 

目录的管理有多种方式。最基本的3种方式是:集中式目录,只有一个站点存放目录;全复制目录,每个站点都存放目录;局部目录,每个站点只含有本地数据库的目录。可以把目录本身作为一个特殊的系统库来对待,则对它也有检索、更新、并发控制等访问和维护问题。

 

 

查询处理及其优化

 

这是分布式数据库的主要技术问题之一。相应于图5的DDB参考体系结构,图6给出了分布式查询处理模型。

 

分布式查询处理负责将用户查询转换为各站点上的物理查询,并负责合并各子查询结果以得到最后结果。

 

查询的效率问题是个关键。因此对用户查询程序应加以优化,寻找一种使查询费用最少的执行策略,这个费用等于传输费用和局部费用之和。有时局部费用相对于传输费用可以忽略不计,如大型广域网联接的系统。但在高速的局域网中,局部费用也必须考虑。

 

 

分布式并发控制技术

 

事务是一个应用或一个应用的一部分,它是数据库的一致性单位,即在事务的执行前后数据库都必须是一致的。分布事务管理必须保证事务具有原子性、持久性、可串行性和隔离性。在大多数系统中是这样得到的,即在现有的本地事务管理程序上面用两阶段托付协议来获得可靠性,用两阶段锁定来进行并发控制,以及用超时来解决死锁检测。

 

两阶段托付协议确保同一事务的子事务全部托付或全部终止,不管有无发生故障;两阶段托付在不丢失运行记录信息的情况下可从任何故障恢复。两阶段锁定机构要求全部子事务在生长阶段获得锁定而在收缩阶段释放锁定。用于死锁检测的超时机构在那些事务可能因死锁而等待时简单地使它们终止。

 

并发控制是分布式事务管理的基本任务之一,其目的是保证分布式数据库系统中多个事务的并发、高效、正确执行。并发控制用来保证事务的可串行性,即事务的并发执行等价于它们按某种次序的串行执行,从而为用户提供了并发透明性。

 

目前已提出了大量的并发控制方法,最基本的有封锁方法、时间印方法和乐观方法等。时间印方法和乐观方法理论上研究得较多,大多数原型DDBMS和商品化DDBMS采用二段锁方法。

 

 

封锁法

 

对于由于共享而产生的冲突,一般可采用封锁技术。即在对数据操作之前,先向并发控制机构提出封锁申请,如果不与其他事务发生冲突,申请被批准,系统对数据加上锁标志;否则令其等待,直至其他事务释放对此数据的封锁。

 

封锁方法中的一个重要问题是封锁粒度的选择。理想的情况是只封锁与操作有关的数据集,通常称为完整性相关域。为了保持数据完整性,至少应封锁完整性相关域中的数据,从而使其中任何施加于现有数据集合的操作所影响的数据都置于封锁之中。封锁分为读锁和写锁,也称共享锁和排它锁。当事务出现冲突操作时,通过加锁原则及锁的相容性机制实现。

 

冲突操作的可串行化调度:当数据共享时,事务并行执行;当数据排它时事务串行执行。使用锁模型实现并发的最著名的算法是两段锁协议。其基本方法是任何事务对数据项操作之前先加锁。加锁的方法是,在事务中的全部加锁操作在第一次解锁操作前完成。锁方式中要进行死锁消除、预防、检测处理。在集中式数据库管理系统中通过两段锁协议可以破坏死锁的形成条件,以保证事务调度的正确性。

 

但是,在分布式数据库管理系统中,要对各自分散而又有共享要求的数据进行集中统一的管理,并用统一的描述使分散在各地的应用数据在用户看来全局统一在一个数据库中,这给事务的并发控制提出了更高要求。

 

在分布式环境下,如果在分布式数据库系统中没有重复存储的数据,可以使用分布式锁技术。其实现方法是,对每个结点保留一个局部锁管理器,处理对存储在本地的数据加锁和释放锁的请求。当分布式数据库系统中有多处重复存储的数据时,可采用集中式锁技术,即仅有一个锁管理器,该管理器放在惟一一个结点上,所有的加锁和释放锁的请求都在该结点上处理。此外,在分布式环境下的锁方法,还有混合锁技术、主副本锁协议等。

 

封锁法实现了一种并发控制,可以满足一般数据库应用对并发控制的要求,但是也有自身的缺点,那就是开销大。事务加锁都有一定的开销,还会降低事务的并发性。以锁为基础的并发控制算法在实际DDBMS中应用较为广泛,例如,在Oracle系统中并发控制的实现就是采用锁方法。

 

 

时间印法

 

所谓时间印法就是在每个事务启动运行时,并发控制机制赋予其惟一一个时间印(通常为事务的启动时间),以实现多事务的可串行性。后继事务有较大的时间印,事务的时间印一直保持到事务结束。

 

此外,每个数据实体都有时间印,分为读时间印和写时间印。读时间印即数据上一次被读出的时间,写时间印即数据最近被写入的时间。只有当时间印比数据项上的时间印大或者相当的事务才能执行对数据的操作并在操作完成后置数据项的时间印为事务和数据项时间印的最大值,否则拒绝令操作重启。这种方法使事务的并行等价于特定的串行序列,即按时间印递增的序列,一般不会产生死锁。

 

在分布式环境下,如果能够解决所有事务生成惟一时间印的策略,集中式时间印技术就可以直接应用于分布式数据库管理系统。实际上,在分布式策略中,每个结点都使用本地的逻辑计数器或时钟产生局部的时间印,全局的时间印通过在局部的时间印前加上各结点的标识符来获得,这样获得的时间印是惟一的,如图7所示。

 

 

惟一时间印

 

采用时间印的并行控制算法主要有两种:基本时间印法和保守时间印法。主要缺点是使事务重新启动的次数较多。为解决这个问题,提出保守时间印法,该方法的主要特点是不会拒绝任何操作,从而不会重启事务。

 

处理方法是当出现冲突操作时,把年轻的缓冲起来,等待年老的操作执行完成后再执行被缓冲起来的操作。这就需要确定何时所有的事务操作均已执行完。但这可能引发死锁的情况,也可能出现某一场地被阻断的情况。事实上,避免死锁的惟一方法是超时后发送一个空操作。

 

在分布式数据库管理系统中,数据的可用性和可靠性从某种角度看是矛盾的。对于可用性和可靠性要求较高的应用,可以采用封锁和时间印相结合的方法,可以避免错误、避免死锁,必要时要考虑采用容错和重构技术来提高可靠性。

 

 

 

 

图1 DDBS的物理结构图

 

 

 

 

图2 DDBS的逻辑结构

 

 

 

 

图3 DDBMS工作原理参考模型

 

 

 

 

图4 DDB控制和通讯系统的组成

 

 

 

 

图5 DDB的参考体系结构

 

 

 

 

图6 分布式查询处理模型

 

 

 

 

图7 产生惟一时间印的分布策略