美文网首页
分布式事务中的隔离性

分布式事务中的隔离性

作者: wayyyy | 来源:发表于2022-10-03 00:14 被阅读0次

    隔离级别定义了并发系统中事务的结果何时,以何种方式对其他并发事务可见。

    隔离级别.png
    • 脏写
      一个事务覆盖了另一个仍在运行中,尚未提交的事务写入的值。

      时间 T1 T2
      1 x = 1
      2 x = 2
      3 y = 2
      4 commit
      5 y=1
      6 commit
    • 脏读
      一个事务读到了另一个尚未提交的事务写入的值。

      时间 T1 T2
      1 x = 1
      2 read(x)
      3 rollback
      4 commit
    • 不可重复读
      在一个事务中查询一个值两次,但两次查询返回的值不同。

      时间 T1 T2
      1 read(x)
      2 x=1
      3 read(x)
      4 commit
      5 commit

      不可重复读和脏读的差别是,脏读是由于其他事务回滚导致的,而不可重复读到的是其他事务已经提交的数据。

    • 幻读
      当一个事务进行条件查询时,另一个事务在中间插入了或删除了匹配该条件的数据,这时事务再去读,就会发生幻读。

      时间 T1 T2
      1 查询用户数为10 SELECT count(*) FROM users
      2 INSERT INTO users VALUES(...)
      3 查询用户数为11 SELECT count(*) FROM users
      4 commit
      5 commit
    • 更新丢失
      当两个事务读取同一个值,然后都试图将其更新为新的不同的值时,就会发生更新丢失。更新丢失的结果是:两个更新只有一个更新生效,但执行更新的另一个事务并没有被告知其更新没有生效。

      时间 T1 T2
      1 x = 1
      2 x = 2
      3 commit
      4 commit
    • 读偏斜

    • 写偏斜

    隔离级别和一致性的区别与联系

    一致性模型和隔离级别相同点是,它们本质上都是用来描述系统能够容忍哪些行为,不能容忍哪些异常行为,更严格的一致性模型或者隔离级别意味着更少的异常行为,但以降低系统性能和可用性为代价。

    它们的区别是:一致性模型适用于单个操作对象,比如单个数据项或单个变量的读写,该数据可能存在副本。而隔离级别通常涉及多个操作对象,比如在并发事务中修改多个数据。

    结合一致性和隔离级别,我们可以得到一个衡量并发系统的模型:

    image.png

    参考资料
    1、《深入理解分布式系统》

    相关文章

      网友评论

          本文标题:分布式事务中的隔离性

          本文链接:https://www.haomeiwen.com/subject/zczjartx.html