首页 理论教育 分布事务管理及恢复集中式方法

分布事务管理及恢复集中式方法

时间:2023-10-21 理论教育 版权反馈
【摘要】:分布式数据库系统中的一个全局事务与很多场地上的数据更新是有关系的,事务是分布执行的,一个事务由不同场地上所具有的子事务组成。(一)分布事务的恢复集中式数据库在运行过程中所具有的分布式数据库同样会出现错误和故障。两段提交协议把一个分布事务的事务管理分为两类,即参与者和协调者。所谓紧密一致性,是指任何时刻的分布式数据库系统都能绝对保证在整个数据上的一致性,同时还包括全局事务所具有的原子性。

分布事务管理及恢复集中式方法

对于一个事务来说,在执行过程中其本身的原子性是需要保持的。也就是说,它所包含的更新操作要么全都做,要么全都不做。分布式数据库系统中的一个全局事务与很多场地上的数据更新是有关系的,事务是分布执行的,一个事务由不同场地上所具有的子事务组成。分布事务所具有的原子性包括这一事务所组成的子事务。它们要么不全部返回,要么不全部提交。

多用户系统中的事务在管理上具有两个方面的问题,即事务上的恢复和并发上的控制。下面针对这两个问题分别进行简单的讨论。

(一)分布事务的恢复

集中式数据库在运行过程中所具有的分布式数据库同样会出现错误和故障。这会导致数据库出现不同程度的损害,使事务不可以正常运行。同时,数据库中数据的不一致可能还会导致数据库在整体上被破坏。分布式数据库系统除了在不同场地的集中式数据库上出现的那些情况之外,也可能发生通信网络中线路中断和通信障碍时延等情况。与集中式数据库相比,它更显复杂,在对其进行恢复的过程中也是比较困难的。

为了执行分布事务,在每个场地中,一个局部事务管理器是必不可少的。这对于局部子事务在执行管理上是很重要的,保证了子事务的完整性。此外,还要注意局部管理器的协调性。所有场地在其处理的子事务上的策略是相同的,要么都返回,要么都提交。为了保证这一策略的执行,常用的技术就是两段提交协议,即2PC。

两段提交协议把一个分布事务的事务管理分为两类,即参与者和协调者。参与者要对子事务在执行和局部数据库上进行相应的写操作;协调者要对这一事务是撤销还是提交做出最后的决定。两段提交协议的内容包括以下两个阶段。

1.第一阶段

在参与者发出“准备提交”信息时,如果参与者要进行提交,协调者就发出“就绪”的信息,否则发出“撤销”的信息。参与者在回答之前,要将相关信息写入自己的日志汇总。协调者在提交信息之前,需要写入自己日志相关的信息。在规定的时间内,协调者在收到参与信息后,对其做出是否撤销的决定。

2.第二阶段

协调者首先在日志中写入相关的决定信息,然后将这一决定发送给所有的参与者。在收到命令后,相关方要在日志中写入“收到提交”或“收到撤销”的信息;协调者要发送“应答”信息,最后做出是否执行的决定。协调者在收到参与者的应答消息后,其事务已经执行结束,与日志相关的信息的保存可以脱机进行。

提交两段协议后,系统如果发生故障,就需要利用相关的日志信息执行恢复操作。该恢复操作与集中式数据库是对应的。

综上可以发现,对于两段提交协议来说,各个结点所采用的方法是完全同步的,所以可以实现数据库的一致性,也就是紧密一致性。

所谓紧密一致性,是指任何时刻的分布式数据库系统都能绝对保证在整个数据上的一致性,同时还包括全局事务所具有的原子性。但在实际应用中,它有比较明显的缺点,具体如下:

(1)全局事务可靠性低。结点的参与失败或网络产生的中断造成的对事务的回滚,都是导致可靠性低的重要原因。(www.xing528.com)

(2)系统效率低下。因为数据库在保持一致性上所使用的方式是完全同步的,所以在性能上起到决定性作用的就是系统中的最慢结点。

为了解决紧密一致性的缺陷,人们提出了松散一致性的概念。也就是对于数据来说,其对副本的修改是异步的。这就说明,在任意时刻,副本是能保证数据库的一致性的。此外,各个副本本身在延迟的时间上是有长有短的,具体要根据系统的情况来决定。与紧密一致性相比,松散一致性是更加灵活的,同时也能提升系统的可用性。在数据一致性上,一些要求不高的应用是比较符合的,而像银行转账这样的关键应用则是不适合的。

(二)并发控制

集中式数据库系统中的并发控制一般采用封锁技术。

封锁可分为不同类型,常用的是共享锁(SLoc)、排他锁(XLock)。封锁的对象可以是表一级的或记录一级的。

为了保证并发事务的可串行性,必须做到以下两点:一是遵守锁的相容性规则;二是遵守两段锁协议。

对于分布式数据库系统来说,封锁技术是合适的。但是与集中式数据库系统进行比较后发现,分布式数据库系统在其特点上是支持多副本的,同时也支持事务在分布上的执行。封锁可能导致全局死锁的情况,相比并发控制,它更显复杂。

为了解决多副本的问题,分布事务管理就要把“事务T对d的X封锁”这件事让d副本所在场地上的事务管理器都知道。一个简单的方法是对场地中的事务管理器发出局部封锁请求,这个方法是合理、有效的,但封锁本身有着较大的冗余度,局部封锁与副本的数量是相同的。

为了减少系统开销,处理多副本的封锁可采取如下几种方法:①对于写操作,要申请对所有副本的X锁;对于读操作,要申请对某个副本的S锁。②无论是写操作还是读操作,都要对多数(大半数)副本申请X锁或S锁。③规定某个场地上的副本为主副本,所有的写操作均申请对主副本的封锁。

利用这三种方法可以有效地发现冲突,有利于提高并发事务执行的有效性。对于封锁上的并发控制来说,在分布环境上需要着重解决全局死锁的情况。该全局死锁包括超过两个场地的死锁。

分布式数据库系统与集中式数据库系统是互相对应的,通过利用分布等待图来实现对死锁的检查。它们的不同之处就是分布不同,死锁进行检查的内容与局部数据库及很多场地是相关的,都需要验证和通信,在开销上都是比较大的。

在进行检测和接触上,死锁之外的情况可以实现对死锁的利用,保证对死锁进行预防,使死锁不会发生。其中的一种方式就是根据某一标准实现事务对其的排序,可以允许沿着这一次序单向等待。这样死锁的情况就不会发生了。

分布式数据库对时标方法和乐观方法等相关的并发控制技术进行研究,但是对于系统而言,封锁方法的实际应用更多。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈