資料庫管理系統 (DBMS) 中的時間戳排序協議說明
時間戳排序協議確保事務在其衝突的讀寫操作中的可序列化。這是協議系統的責任,即衝突的任務對應根據事務的時間戳值執行。
當較舊的事務嘗試讀取/寫入已經被較新事務讀取或寫入的值時,就會發生衝突。只有當對該資料項的最後更新是由較舊的事務執行的,才能進行讀取或寫入。
否則,請求讀取/寫入的事務將被重啟並獲得新的時間戳。這裡不使用鎖,因此不會發生死鎖。
事務 Ti 的時間戳記表示為 TS(Ti)。
資料項 X 的讀取時間戳記表示為 R-timestamp(X)。
資料項 X 的寫入時間戳記表示為 W-timestamp(X)。
在對資料項 X 成功執行讀取/寫入操作後,這些時間戳記將被更新。
在發生衝突操作時,較舊的事務優先於較新的事務。透過回滾和重啟事務來解決衝突。
事務規則
為了確保可序列化,使用以下規則:
規則 1 - 如果事務 Ti 發出 read(X) 操作。
如果 TS(Ti) < W-timestamp(X)
操作被拒絕。
如果 TS(Ti) >= W-timestamp(X)
執行操作。
所有資料項時間戳更新。
規則 2 - 如果事務 Ti 發出 write(X) 操作。
如果 TS(Ti) < R-timestamp(X)
操作被拒絕。
如果 TS(Ti) < W-timestamp(X)
操作被拒絕,Ti 回滾。
否則,執行操作。
Thomas 寫規則
此規則規定,如果 TS(Ti) < W-timestamp(X),則拒絕操作並回滾 Ti。
可以修改時間戳排序規則以使排程檢視可序列化。
無需使 Ti 回滾,“寫入”操作本身將被忽略。
效果 - Thomas 寫規則允許此類操作,是對基本時間戳排序協議的修改。在 Thomas 寫規則中,使用者忽略過時的寫入。
示例
S: f1(X) W2(X) W1(X)
檢查時間戳排序協議是否允許排程 S。
解決方案
X-----------------RTS------3 X----------------WTS------4 For f1(X) : TS(Ti) <WTS(X) i.e TS(T1)<WTS(X) 3<0 (FALSE)
轉到 else 並執行寫入操作 W2(X) 和 WTS(X)=4
For W1(X): TS(Ti)<RTS(X) i.e TS(T1)<RTS(X) 3<3 (FALSE) TS(T1)<WTS(X) 3<4 (TRUE) ROLLBACK