在DBMS中,什麼是可序列化(serializability)?


如果一個排程等價於一個序列排程,則稱該排程是可序列化的。併發排程必須確保其執行結果與序列執行(即一個接一個地執行)相同。它指的是一系列操作(如讀取、寫入、中止、提交)以序列方式執行的順序。

示例

讓我們假設有兩個事務 T1 和 T2,

如果這兩個事務在執行過程中互不干擾,則稱為序列排程,可以表示如下:

T1T2
READ1(A)
WRITE1(A)
READ1(B)
C1

READ2(B)

WRITE2(B)

READ2(B)

C2

**非序列排程** - 當一個事務與事務 T1 和 T2 之間發生重疊時。

示例

考慮以下示例:

T1T2
READ1(A)
WRITE1(A)

READ2(B)

WRITE2(B)
READ1(B)
WRITE1(B)
READ1(B)

可序列化的型別

可序列化主要有兩種型別:

檢視可序列化

如果一個排程在檢視上等價於一個序列排程,則稱該排程是檢視可序列化的。

它遵循以下規則:

  • T1 讀取 A 的初始值,然後 T2 也讀取 A 的初始值。

  • T1 讀取 T2 寫入的值,然後 T2 也讀取 T1 寫入的值。

  • T1 寫入最終值,然後 T2 也對最終值進行寫操作。

衝突可序列化

它以與某些序列執行相同的方式對任何衝突操作進行排序。如果兩個操作作用於同一個資料項,並且其中一個操作是寫操作,則稱這兩個操作發生衝突。

這意味著

  • Readi(x) readj(x) - 非衝突 讀-讀操作

  • Readi(x) writej(x) - 衝突 讀-寫操作。

  • Writei(x) readj(x) - 衝突 寫-讀操作。

  • Writei(x) writej(x) - 衝突 寫-寫操作。

更新於: 2023年11月7日

57K+ 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.