數據庫中沖突可串行化的判斷


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM