并发调度的可串行化

(本文只是来自数据库系统概述,自己总结,如果看过这本书的同学可以不用看这篇文章。)

可串行化调度

定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序的串行化调度的结果是一样的,成这种调度为可串行化调度

现在有两个事务,分别包含以下操作:
事务T1:读B:A=B+1;写回A;
事务T2:读A:B=A+1;写回B。

假设A、B的初值均为2,按T1-T2次序的执行结果为:A=3,B=4;按T2-T1的执行结果为:B=3,A=4.

下图给出了不同的调度策略。(图片来源于数据库)
从下图可以看出,C不是可串行化调度,因为它的执行结果与串行化(此处有2中串行化执行方案)的执行结果不相同。但是D是可串行化调度的。理由和C正好相反。

Android 并发数据串行处理 并发可串行化_数据库开发

冲突操作

冲突操作主要指的是不同的事务对同一个数据的读写操作以及写写操作。其他操作都是不冲突的。

冲突可串行化调度

一个调度Sc0在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作次序得到另一个调度Sc1,如果Sc1是串行的,称调度Sc为冲突可串行化的调度。**若一个调度室冲突可串行化,则一定是可串行化调度。**因此可以使用这种方法来判断一个调度是否是冲突可串行化的。

通过例题来学习什么是冲突可串行化以及不是冲突可串行化的。

Android 并发数据串行处理 并发可串行化_初值_02

Android 并发数据串行处理 并发可串行化_Android 并发数据串行处理_03

注意:冲突可串行化调度是可串行化调度的充分条件,不是必要条件。还有不满足冲突可串行化条件的可串行调度。(如上面的例子L2)