再谈数据库事务隔离性.docxVIP

  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文档。上传文档
查看更多
再谈数据库事务隔离性 2021-06-06 写在前面 近两年分布式数据库技术加速进展,而由于金融行业技术生态的限制,四周很多同学对其并没有深化的了解,所以进行高功能、高牢靠系统设计时往往缺少这一利器。Ivan期望以系列文章的方式与大家沟通探讨,加深我们对分布式数据库的生疏。本文是该系列文章的第一篇,次要探讨事务管理中的隔离性,厘清相关概念和关键技术,为后面阐述分布式数据库的事务管理做一个铺垫,姑且算是一篇前传吧。 注释 我们首先从定义动身,事务管理包括原子性、全都性、隔离性和长久性四个方面,即ACID。全部数据库专著都会给出这个四个特性的定义,本文我们引用了Jim Gray对其的定义。 Jim Gray是事务处理方面的大师,本文中很多内容都来自他的专著和论文。为避开翻译引入的歧义,这里我们直接引用。 Atomicity:?Either all the changes from the transaction occur (writes, and messages sent), or none occur. Consistency:?The transaction preserves the integrity of stored information. Isolation:?Concurrently executing transactions see the stored information as if they were running serially (one after another). Durability:?Once a transaction commits, the changes it made (writes and messages sent) survive any system failures. 在上述隔离性(Isolation)的定义中,我们可以发觉其目标是使并发事务的执行效果与串行全都,但在具体技术实现上往往需要在并发力量和串行化效果之间进行平衡,很难两者兼顾。平衡的结果就是会消灭违反串行效果的现象即特别现象(Phenomenon)。通常来说,隔离级别的提升伴随着并发力量的下降,两者负相关。各种数据库在谈到隔离级别时都会引用ANSI SQL-92标准隔离级别,我们来看看它的具体内容。 ANSI SQL-92 Isolation Levels ANSI SQL-92可能是最早提出了基于特别现象来定义隔离级别的方法,同时没有将隔离级别与具体实现机制绑定,隔离的实现可以基于锁(lock-based)或者无锁(lock-free),兼容了后续的技术进展。该标准依据三种特别现象将隔离性定义为四个级别,具体如下。 脏读,事务(T1)中修改的数据项在尚未提交的情况下被其他事务(T2)读取到,而T1进行Rollback操作,则T2刚刚读取到的数据并没有实际存在。 不行反复读,T1读取数据项,T2对其中的数据进行了修改或删除且Commit成功。假如T1尝试再次读取这些数据,会得到T2修改后的数据或者发觉数据已删除。这样T1在一个事务中两次同样条件的读取,且结果集内容变更或结果集数量削减。 幻读,T1使用特定的查询条件获得一个结果集,T2插入新的数据且这些数据符合T2刚刚操作的查询条件。T2 commit 成功后,T1再次执行同样的查询,此时得到的结果集增大。 很多文章都结合数据库产品对上述特别现象的实例和处理机制进行了说明,本文中不再赘述,有爱好的同学可以参考文末的链接[1]。 ANSI SQL-92标准早在92年发布,但无论是当时还是后来都没有被各大数据库厂商严格遵照,部分缘由可能是标准过于简化与实际应用有肯定程度的脱离。Jim Gray等人在1995发布了论文“A Critique of ANSI SQL Isolation Levels” (本文中简称为Critique[2])对隔离级别进行更全面的阐述,可以挂念我们加深理解。 Critique Isolation Levels Critique提出了ANSI SQL-92存在的两个问题,首先是自然言语方式界定的特别现象并不严格导致一些同质化的特别现象被遗漏;其次是一些典型的特别现象并没有被涵盖进去,导致隔离级别存在明显缺失。因而,文中对ANSI SQL-92的三种特别现象(将其编号为A1/A2/A3)进行了扩展(编号为P1/P2/P3),并添加了另外5种常见的特别现象。受限于篇幅,这里仅对两种特别现象进行说明。 Lost Update 丢失更新(Lost Update)是一个经典的数据库问题,由于太过重要全部主流数据库都处理了该问题,我们这里将操作稍加变形来举例。 我们使用MySQL进行演示,创建表并初始化数据 T1 T2 begi

文档评论(0)

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

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

1亿VIP精品文档

相关文档