在DBMS中,什麼是可序列化(serializability)?
如果一個排程等價於一個序列排程,則稱該排程是可序列化的。併發排程必須確保其執行結果與序列執行(即一個接一個地執行)相同。它指的是一系列操作(如讀取、寫入、中止、提交)以序列方式執行的順序。
示例
讓我們假設有兩個事務 T1 和 T2,
如果這兩個事務在執行過程中互不干擾,則稱為序列排程,可以表示如下:
| T1 | T2 |
|---|---|
| READ1(A) | |
| WRITE1(A) | |
| READ1(B) | |
| C1 | |
| READ2(B) | |
| WRITE2(B) | |
| READ2(B) | |
| C2 |
**非序列排程** - 當一個事務與事務 T1 和 T2 之間發生重疊時。
示例
考慮以下示例:
| T1 | T2 |
|---|---|
| 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) - 衝突 寫-寫操作。
廣告
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP