隔离级别定义了并发系统中事务的结果何时,以何种方式对其他并发事务可见。
隔离级别.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、《深入理解分布式系统》
网友评论