1. 时间戳的并发控制
调度并发事务的时间戳方法给每个事务分配一个全局惟一的时间戳.时间戳的值产生了一个精确的顺序,事务按照该顺序提交给DBMS.时间戳必须有两个特性:惟一性和单调性.惟一性保证不存在相等的时间戳值,单调性保证时间戳的值是一直增长的.
同一事务中所有的数据库操作(读和写)都必须有相同的时间戳.DBMS按照时间戳顺序执行冲突的事务,因此保证了事务的可串行化.如果两个事务冲突,通常终止其中一个,将其回滚并重新调度,赋予新的时间戳.
存储在数据库中的每个值都要求两个附加的时间戳域:一个是该域最后一次读的时间,另一个是最后一次更新的时间.因此时间戳增加了内存需求和数据库的处理开销.因为有可能导致许多事务被终止,重新调度和重新赋予时间戳,时间戳方法一般需要大量的系统资源.
2. 乐观的并发控制
乐观方法基于这样的假设,数据库操作的大部分都不会发生冲突.乐观方法不要求锁定.作为替换,事务不受限制地被执行,直到它被提交.便用乐观方法,每个事务经过两个或者三个阶段,它们是读,确认,写.
(1) 读阶段,事务读取数据库,执行需要的计算,并对一个私有的数据库值的副本进行更新.事务的所有更新操作都记录在一个临时更新文件中,该文件将不会被剩下的其他事务访问.
(2) 确认阶段,对事务进行确认以保证所做的修改不会影响数据库的完整性和一致性.如果确认检查是肯定的,事务进入写阶段;如果确认检查是否定的,则事务回滚,重新启动,所做的修改被抛弃.
(3) 写阶段,所做的修改被永久地写入到数据库中.乐观方法对于大多数只有较少更新事务的查询数据库系统来说是可以接受的.
3. 三种并发控制方法的比较
在存储空间上的比较:
(1)封锁:锁使用的空间与封锁对象个数成正比.
(2)时间戳:每个数据库对象的读时间和写时间都需要空间,不管是否当前被访问.
(3)乐观:需要保存事务操作的临时副本.
其中时间戳和乐观方法可能使用空间稍微多一些,因为他们需要记录最近提交事务的某些访问,而封锁不需要.
是否推迟事务的比较:
(1)封锁推迟事务但避免了回滚,而时间戳和乐观方法不推迟事务,但会导致事务回滚,而这是推迟的一种更严重的形式,并且也浪费资源.
(2)如果事务之间相互影响较低,时间戳和乐观方法都不会导致太多的回滚,而封锁不管相互影响如何,系统开销相同.
(3)时间戳比乐观方法更早地捕获问题.
