判斷衝突可序列化

2021-08-16 19:45:35 字數 2682 閱讀 9130

在資料庫中,事務在併發排程過程中,會產生多種結果,什麼樣的排程是正確的?只有序列排程才是正確的結果。併發過程的結果只有與序列排程結果一樣的才是正確的。這種併發排程被稱為可序列化排程。

可序列化是併發事務正確排程的基本準則。對於乙個併發排程,當且僅當它是可序列化的時候,才被認為是正確排程。

本文主要講解判斷可序列化排程的充要條件。

1.衝突操作指的是不同事務對於同一資料的讀寫操作與寫寫操作。

2.有些衝突操作是可以交換次序的,有些衝突操作不能交換次序。

3.不能交換

位置的次序為:    (1).不同事務的衝突操作。

(2).同一事務的兩個操作。

4.乙個排程sc在保證衝突操作(即3中的兩種情況)次序

不變的情況下,通過交換兩個事務不衝突操作的次序得到另乙個排程sc',如果sc'是序列的,則稱排程sc為衝突可序列化的排程。(如果覺得第四句話拗口不熟悉繼續往下看就明白了)

例1:有兩個事物t1與t2,初值a=10,b=20。

t1:讀b;a=b+1 ;

t2:讀a;b=a+1;

先執行t1,後執行t2,結果為a=21,b=22。

先執行t2,後執行t1,結果為a=12,b=11。

以上兩種結果均是正確。除這兩種結果外的結果,都是錯誤的排程結果。

例2.先導解釋:r1(a),其中r代read表讀操作,1代表事務1,a代表a類資料。w2(b),w代表write寫操作,2代表事務2,b代表資料b。

例2:有一排程,sc1=r1(a)w1(a)r2(a)w2(a)r1(b)w1(b)r2(b)w2(b),

選出其可以交換的次序,即不是第二種情況就可以交換次序:

r1(a)w1(a)

r2(a)w2(a)

r1(b)w1(b)

r2(b)w2(b)這四個顏色塊分別標記為a,b,c,d。(注意各塊內部也是可以分開的)

經過上文的分析,從塊與塊之間的角度來看,我們可以得出a與b是衝突操作,c與d是衝突操作,符合第三條的第一種情況,所以這兩個不能交換次序。

再從塊內角度分析,a內部r1(a)w1(a)是衝突操作,符合第三條的第二種情況,所以這兩個不能交換次序。同理可得bcd塊內情況均是如此。

下面我們打破塊的束縛,從整體來看,綠色塊跟青色塊可以交換次序,因為這兩個操作不衝突,不符合第三條的任意一種情況。

r1(a)w1(a)r2(a)w2

(a)r1(b)w1(b)r2(b)w2(b)

交換這兩個塊,可以得到如下結果:

r1(a)w1(a)r2(a)r1(b)w1(b)

w2(a)r2(b)w2(b)

再看新的綠色快=塊與青色塊,如果交換它倆也不會發生衝突:

r1(a)w1(a)r2(a)

w2(a)r1(b)w1(b)r2(b)w2(b)

交換之:

r1(a)w1(a)r1(b)w1(b)

r2(a)w2(a)r2(b)w2(b)

最後這個結果就變為:

r1(a)w1(a)

r1(b)w1(b)

r2(a)w2(a)

r2(b)w2(b)

把原來的次序:r1(a)w1(a)r2(a)w2(a)r1(b)w1(b)r2(b)w2(b)

換成了r1(a)w1(a)r1(b)w1(b)

r2(a)w2(a)r2(b)w2(b)

這就相當於執行了序列操作t1,t2。於是,這就是衝突可序列化。

序列化就是把同乙個事務要做的讀寫操作按先後順序排到一塊。併發事務可以調整成序列化的話,就稱為可序列化排程。

有三個事務t1 = w1(y)w1( x ) , t2 = w2(y)w2( x ) , t3 = w3( x )。

排程l1=w1(y)w1( x )w2(y)w2( x )w3( x )是乙個序列排程。

排程l2=w1(y)w2(y) w2( x )w1( x )w3( x )不滿足衝突可序列化,但是排程l2是可序列化的。因為l2的排程結果與l1結果相同。為啥相同?自己隨便代入值算算就知道了。

為什麼說排程l2不可衝突序列化?如果把w1(x) 放到w2(y) w2( x )前,變為w1(y)w1( x )

w2(y)w2( x )

w3( x ),就違反了第三條第一種情況,所以不能改變次序。但是可序列化的條件是只要滿足其中一種序列排程次序就可以。

在本題中序列順序有6種,分別是123,132,213,231,312,321.

上文的判斷方法很穩妥,求出來的肯定是對的,但如果用優先圖來做的話,時間效率會很高,而且容易識別出錯誤來。

用圓圈跟邏輯線來表示,圓圈表示事務,邏輯箭頭線表示從事務1轉向事務2.

例:有三個事務t1 = w1(y)w1( x ) , t2 = w2(y)w2( x ) , t3 = w3( x )。排程l2=w1(y)w2(y) w2( x )w1( x )w3( x )的優先圖畫法如下圖所示:

有環就不能衝突可序列化,沒有環的就可以。

畫優先圖注意事項:

1.所有資源都要畫上,在邏輯線上標註資源名稱,在圓圈內標註事務標號。、

2.如果要畫從ti到tj的線,需要滿足以下三種情況的其中一種:

(1)tj在read(w)前,ti要write(w)

(2)tj在write(w)前,ti要read(w)

(3)tj在write(w)前,ti要write(w)

可序列化和自定義序列化

序列化技術的主要兩個目的是 持久化儲存 按值封送。net framework支援三種序列化器 binary xml soap.他們各有優缺點,分別列如下 1.binary序列化是完全保真的,因為除非特殊宣告為nonserialized,那麼所有成員 包括私有的和公有的 都會被序列化。該序列化器的結果...

可序列性與「嚴格」可序列化區別

多年來,可序列化 序列化 serializability 被稱為資料庫隔離級別的 標準 它是絕大多數商業資料庫系統中提供的最高隔離級別,一些高度廣泛部署的系統甚至無法提供隔離級別與可序列化一樣高。在這篇文章中,我們展示了可序列化的可行性,並且說明它從未成為資料庫系統的 標準 事實上,嚴格的可序列化才...

序列化(序列化)

原書上翻譯為序列化,msdn翻譯為序列化 作用 當需要儲存,或者網路傳輸 remoting時,資料 物件或值 需要序列化 類似於打包傳輸檔案。system.serializableattribute 序列化是指儲存和獲取磁碟檔案 記憶體或其他地方中的物件。在序列化時,所有的例項資料都儲存到儲存介質上...