三类数据库事务并发控制方法实现及比较.docVIP

三类数据库事务并发控制方法实现及比较.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
三类数据库事务并发控制方法实现及比较

三类数据库事务并发控制方法的实现及比较   摘要: 在多用户的数据库系统中,由于事务的并发性而带来了三类的并发问题。为解决这些问题,本文介绍了三种事务的并发控制方法:封锁法、时间印法和乐观法,并分析了它们的优缺点。   关键词: 并发控制 封锁 时间印 乐观      1.引言      在数据库环境中,事务是一个十分重要的概念。一个事务是由一系列的对数据库的查询操作和更新操作构成的。这些操作是一个整体,不能分割,即要么所有的操作都顺利完成,要么一个也不要做。绝不能只完成了部分操作,而还有一些操作没有完成。   而事务的并发控制则是通过调度来确保事务的并发执行的效果等同于没有并发执行时的执行效果,也就是使事务的并发执行调度等价于事务的某个可串行化调度,从而确保数据库的一致性,其作用是正确协调同一时间里多个事务对数据库的并发操作,解决资源竞争问题以保证数据库的一致性和完整性。      2.三类并发问题      并发是多个事务同时存取数据库同一数据时可能会导致数据存取不一致,数据不真实的现象。并发将引起数据争用,可导致丢失更新、读脏数据、不可重复读三类错误,破坏数据的一致性。(如表一所示)   2.1丢失更新:当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。(如表二所示)   2.2读脏数据:当第二个事务选择其它事务正在更新的行时,第二个事务正在读取的数据还没有确认,并且可能由更新此行的事务所更改。   2.3不可重复读:当第二个事务多次访问同一行而且每次读取不同的数据时,称为不可重复读错误。不可重复读错误产生的原因是其它事务在此期间更改了第二个事务正在读取的数据。(如表三所示)         3.三类并发控制方法      在多用户环境下,多个用户可能同时对数据库进行操作。假设在某一时间段内有多个事务同时在进行,且它们(或其中的一部分)操作了相同的数据,若没有采用任何并发控制手段,就???能出现前文所说的数据错误。要避免这样的错误,就必须采用并发控制方法。下面具体介绍三类并发控制方法。   3.1封锁并发控制方法   封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象如数据库、表、数据块、记录和数据项等操作之前,先向系统发出请求,对其加锁,加锁成功后,事务T才可以对该数据进行操作,操作完成后,在某个时刻,事务T要释放锁。   最常用的有两种锁:排它锁(Exclusive Locks,X锁)和共享锁(Share Locks,S锁)。   排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。   共享锁又称读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。   在运用X锁和S锁这两种基本封锁对数据对象加锁时,还需要约定一些规则,如何时申请X锁或S锁,持锁时间和何时释放等。这些规则构成封锁协议(Locking Protocol)。对应前面分析的并发操作问题,可以用以下三级协议解决:一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。一级封锁协议可以解决“丢失修改”的问题。二级封锁协议:采用一级封锁协议后,若事件T在读取同一数据必须先对其加S锁,读完后即可释放S锁。二级封锁协议可以解决“读脏数据”的问题。三级封锁协议:采用一级封锁协议加上事务T在读取数据R之前必须先对其加S锁。直到事务结束才释放。三级封锁协议可以解决“不可重复读”的问题。   两段封锁协议(Two-phase Locking)也是一种最常用的封锁协议,理论上已经证明使用两段封锁协议产生的是可串行化调度。其主要内容是:   (1)在对任何数据进行读写之前,事务首先要获得对该数据的封锁。   (2)在释放一个封锁之后,事务不再获得任何其它封锁。   即事务分为两个阶段:   (1)生长阶段:获得封锁。   (2)收缩阶段:释放封锁。   两段封锁法的策略有两个主要的优点:   (1)一个事务总是读由另一个已提交的事务写入的值,因此不会因为一个事务的计算是基于它本不应该看到的文件而中止它。   (2)所有锁的请求与释放都可以由系统来处理而无须事务关心:只要访问一个文件就可以请求一个锁,当事务结束时就可以释放一个锁。   3.2时间印并发控制方法   所

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档