Timestamp Ordering Concurrency Control
Timestamp Ordering (T/O) concurrency control 是一種樂觀的並發控制協議,這種協議會假設衝突不常發生,因此不會在讀取或寫入資料庫之前獲取鎖。 T/O 的主要概念是為每個 transaction 分配一個 timestamp,如果 ,則 DBMS 需要確保執行計劃等價於一個交易順序為 的序列。
而實現 T/O 需要單調遞增的 timestamp,通常有以下幾種方法 :
- system clock : 使用系統的時鐘來生成 timestamp,有可能會受到夏令時間 (Daylight Savings Time,會在夏令時調整時鐘) 等意外狀況的影響
- logical counter : 使用邏輯計數器來生成 timestamp,這種方法可能會有溢出問題,並且很難在分散式系統中維持一致性
- hybrid clock : 結合系統時鐘和邏輯計數器
Basic Timestamp Ordering (BASIC T/O)
Basic Timestamp Ordering (BASIC T/O) 是一種最基本的 T/O 協議。 在這個協議中,事務讀寫都不需要加鎖,且每條資料 都會有兩個 timestamp,分別是 read timestamp () 和 write timestamp (),Basic T/O 會在每次操作時檢查這些時間戳。如果交易試圖讀取未來的資料,該交易將被中止並重新啟動。
Read
- 檢查 是否大於 ,如果小於則代表 試圖讀取未來的資料,因此 會被中止並重新啟動,否則 可以讀取
- 如果讀取成功,則更新 為
- 為了確保可以重複讀取到相同的資料,DBMS 會儲存一個副本
Write
- 檢查 是否小 於 和 ,如果小於則代表 試圖覆蓋未來的資料,因此 會被中止並重新啟動,否則 可以寫入
- 如果寫入成功,則更新 為
Example
詳細的例子可以參考投影片的第 10 頁 CMU 15-445/645: Timestamp Ordering Concurrency Control。 這邊我們只解釋第二個例子。
我們可以看到 T1 在 T2 修改了 A 之後又修改了 A,因此 T1 會被中止並重新啟動。
Thomas Write Rule (TWR)
如果 ,根據 Thomas Write Rule,DBMS 可以選擇忽略這個寫入操作並繼續執行,雖然這違反了 T/O 的原則,但是由於沒有其他操作依賴於這個寫入操作 (會寫入到 local copy 中),因此不會影響 schedule 的 serializability。