什麼是DBMS中的樂觀併發控制?
所有資料項在事務結束時更新,如果發現任何資料項與其中的值不一致,則回滾事務。
在事務結束時檢查衝突。事務執行期間不進行檢查。所有檢查一次性完成,因此事務執行開銷低。更新在事務結束之前不應用。它們應用於事務空間中的本地副本。
階段
樂觀併發控制有三個階段,如下所述:
讀取階段
讀取各種資料項並將其儲存在臨時變數(本地副本)中。所有操作都在這些變數中執行,而無需更新資料庫。
驗證階段
檢查所有併發資料項以確保可序列化,如果事務更新實際上應用於資料庫,則不會進行驗證。任何值的更改都會導致事務回滾。使用事務時間戳並維護寫集和讀集。
要檢查事務 A 是否不會干擾事務 B,必須滿足以下條件:
TransB 在 TransA 開始讀取階段之前完成其寫入階段。
TransA 在 TransB 完成其寫入階段後開始其寫入階段,並且 TransA 的讀集與 TransB 的寫集沒有共同項。
TransA 的讀集和寫集與 TransB 的寫集都沒有共同項,並且 TransB 在 TransA 完成其讀取階段之前完成其讀取階段。
寫入階段
如果驗證成功,則將事務更新應用於資料庫。否則,將丟棄更新並中止和重新啟動事務。它不使用任何鎖,因此沒有死鎖,但是可能會發生資料項的飢餓問題。
問題
S: W1(X), r2(Y), r1(Y), r2(X).
T1 -3
T2 – 4
檢查時間戳排序協議是否允許排程 S。
解決方案
最初對於資料項 X,RTS(X)=0,WTS(X)=0
最初對於資料項 Y,RTS(Y)=0,WTS(Y)=0

For W1(X) : TS(Ti)<RTS(X) i.e. TS(T1)<RTS(X) TS(T1)<WTS(X) 3<0 (FALSE)
=>轉到 else 並執行寫入操作 w1(X) 和 WTS(X)=3
For r2(Y): TS(T2)<WTS(Y) 4<0 (FALSE)
=>轉到 else 並執行讀取操作 r2(Y) 和 RTS(Y)=4
For r1(Y) :TS(T1)<WTS(Y) 3<0 (FALSE)
=>轉到 else 並執行讀取操作 r1(Y)。
For r2(X) : TS(T2)<WTS(X) 4<3 (FALSE)
=>轉到 else 並執行讀取操作 r2(X) 和 RTS(X)=4
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP