数据库中冲突可串行化的判断

1.概念

为了描述一个程序的各部分(程序段或语句)间的依赖关系,或者是一个大的计算的各个子任务间的因果关系,我们常常采用前趋图方式。前趋图中的每个结点可以表示一条语句、一个程序段或一个进程,结点间的有向边表示两个结点之间存在的偏序(Partial Order)或前趋关系(Precedence Relation)“→”。


2.冲突可串行化简介
a.可串行化调度

多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行执行这些事务时的结果相同,称这种调度策略为可串行化调度。
可串行性是并发事务正确调度的准则。
b.冲突可串行化调度

一个调度S在保证冲突操作的次序不变的情况下,通过交换两个事物不冲突操作的次序得到另一个调度S',如果S'是串行的,称调度S为冲突可串行化的调度。

c.冲突操作

不同的事务对同一数据的读写操作和写写操作。

同一事务的两个动作冲突:ri(X);wi(X),

不同事务对同一数据库元素的写冲突:wj(X);wi(X),

不同事务对同一数据库元素的读和写冲突:ri(X);wj(X),

这些都是冲突操作:r1(A) w1(A), r1(A) w2(A)  ,   w2(A)   r1(A)  ,    w1(A) w2(A)


3.前趋图画法

节点:  S中的事务

弧:  Ti ->Tj whenever

- pi(A),qj(A) 涉及同一数据库元素

- pi(A)<qj(A)(这里指的是调度的先后顺序)

- pi, qj 至少一个是写动作


4.判断是否冲突可串行化

如果存在环,   S 不是冲突可串行的, 否则, S 是冲突可串行的


5.举个栗子

例如S=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B)

其中w1(A)r2(A)得出T1 ->T2 ,w1(B)r2(B)得出T1 ->T2

无环,故S是可串行调度


6.再举一个

S1=r2(A)r1(B)w2(A)r2(B)r3(A)w1(B)w3(A)W2(B)

r2(A)w3(A)得出T2->T3

 r1(B)W2(B)得出T1 ->T2

r2(B)w1(B)得出T2 ->T1

有环,故S1 不是冲突可串行化的

本文转载自-》链接:https://blog.csdn.net/fmc201314/article/details/53872704

原文地址:https://www.cnblogs.com/ljysy/p/12511309.html