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

分布式事务中的隔离性

作者: 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