瞎掰事务(一):四大特性立体关系剖析(最好的理解一致性)「终于解决」

瞎掰事务(一):四大特性立体关系剖析(最好的理解一致性)「终于解决」四大特性 原子性,事务中所有操作是不可再分割的原子单位。事务中所有操作要么全部执行成功,要么全部执行失败; 一致性,事务执行后,数据库状态与其它业务规则保持一致; 隔离性,指在并发操作中,不同事务之…

瞎掰事务(一):四大特性立体关系剖析(最好的理解一致性)

原子性,事务中所有操作是不可再分割的原子单位。事务中所有操作要么全部执行成功,要么全部执行失败; 一致性,事务执行后,数据库状态与其它业务规则保持一致; 隔离性,指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会相互干扰。 持久性, 一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据 比较难理解的是一致性的表述。有一种补充解释是一致性保证的是从一种状态到另一种状态的一致维护,而保证不出现中间状态。当注意力放在中间状态时,一致性与隔离性的定义有重叠,当注意力放在两种状态的切换,又与原子性的定义有重叠。所以这样的解释对于深入理解事务的四大特性是不完美的。

四大特性的深入理解

一个完整的事务系统需要数据库,事务框架,业务逻辑三层组成。数据库是事务构成的基石,这也是数据库区别于文件系统的主要特征。在数据库层级上,提供了事务隔离级别的实现。一般的事务隔离级别分为四级 读未提交:read uncommitted 读已提交:read committed 可重复读:repeatable read 串行化:serializable 本质上,事务的隔离性是由数据库层级上的隔离级别保证的。持久性也是数据库层级所保证的,这个很容易理解。到了原子性,情况发生了变化。 数据库层级提供了commit 和 rollback 的函数,但是这没有提供全部成功和全部失败的原子性完全保证,仍需要事务框架的支持。这就是事务托管方。事务托管方可以是持久化框架如Mybatis,Hibernate等,也有可能是更高一点的框架,如spring framework,还有一种比较容易被忽视的,就是手动编写的完整的具有事务控制的SQL 脚本,这与其他事务托管方所完成的工作几乎一样。当然最常见的还是spring 的事务模块,在下一篇我们可以对spring 事务的细节展开,这里我们继续扣题发挥。最后就是一致性了。一致性的保证是最特殊的,需要数据库,事务框架,业务逻辑自下而上的共同维护。数据库层级提供持久性和隔离性的保证,并提高原子性的能力与事务框架共同提供原子性保证,基于这些下层能力的基础,才能最终在顶层业务的逻辑层完成一致性的保证。所以一致性是数据库状态与其他业务规则保持一致。

瞎掰事务(一):四大特性立体关系剖析(最好的理解一致性)「终于解决」

用转账的例子 A账号往B账号里转5000,这时候数据库要执行两行代码: A:减去5000 B:加上5000 这是一致性情况,如果代码为 A:减去5000 B:加上5001 这就是对一致性的破坏。

所以认为隔离性和原子性与一致性是有重叠的,更好的解释是他们的关系是因果的链式关系。再看一下他们”非重叠的部分“

瞎掰事务(一):四大特性立体关系剖析(最好的理解一致性)「终于解决」

隔离级别在RR以上,一致性和隔离性是”吻合“的,但在RR之下,事务内的中间状态对其他事务而言是暴露的。这是对关于一致性对可见性约束的破坏,另一方面也说明他们管辖范围的不同。至于更多的不同或侧重点不需一一赘言。

这里瞎掰了事务四大特性立体的关系,关于更多或者不同的理解您可以留言讨论。后面关于事务有更多的分析,欢迎拍砖

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9609.html

(0)
上一篇 2023-02-04
下一篇 2023-02-04

相关推荐

  • 数据库迁移系列之–Oracle迁移到Mysql

    数据库迁移系列之–Oracle迁移到Mysql敬请期待…

    2023-02-26
    146
  • python协程总结(协程Python)

    python协程总结(协程Python)在python中线程和协程的区别:1、一个线程可以拥有多个协程,这样在python中就能使用多核CPU;2、线程是同步机制,而协程是异步;3、 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。

    2023-11-01
    132
  • 测试在线答案查询:Python工程师必备利器

    测试在线答案查询:Python工程师必备利器在软件开发领域,需要进行各种各样的测试工作,其中就包括测试问题的答案。对于Python工程师来说,一个好用的在线答案查询工具是必不可少的。本文介绍了一个强大的Python库——WolframAlpha,它可以解决许多测试中出现的数学、物理、化学、天文学等问题。

    2023-12-24
    113
  • Python seek()函数:快速定位并移动文件指针

    Python seek()函数:快速定位并移动文件指针a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-03-10
    94
  • 使用Shell清空文件内容的方法

    使用Shell清空文件内容的方法
    在进行日常工作中,我们经常需要对文件进行处理,有时候需要清空文件内容,但是很多人不知道如何用Shell来实现这一操作。本文将详细介绍如何使用Shell来清空文件内容,帮助读者解决相关问题。

    2024-05-13
    71
  • 实时数据湖在字节跳动的实践[亲测有效]

    实时数据湖在字节跳动的实践[亲测有效]实时数据湖在字节跳动的实践

    2023-05-20
    133
  • 优雅地结束Python for循环

    优雅地结束Python for循环a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2023-12-06
    111
  • 掌握Python Range范围,轻松编程

    掌握Python Range范围,轻松编程Python语言是一种高级编程语言,它诞生于上世纪90年代初期,当时由荷兰人Guido van Rossum编写,它的独特之处在于语言简洁易懂,适合初学者入门,并且终身学习都不会过时。Python有许多内置函数,其中Range()函数是很有用的一个,它可以让我们方便、简洁地实现循环输出指定长度范围的数字序列。在本文中,我们将深入探讨Range()函数的相关内容,帮助读者轻松掌握这个实用的函数,并且让读者感受到Python语言的优美之处。

    2024-04-17
    75

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注