[討論] timestamp ordering 同步控制問題
資料庫同步控制timestamp ordering的疑問:
1. 前提說明:
(1) 交易T的唯一識別碼timestamp為Ts(T), 代表交易開始時間
(2) Read-Ts(x)為對資料項目x的讀取timestamp,
代表成功讀取x的最年輕交易之timestamp
(3) Write-Ts(x)為對資料項目的寫入timestamp,
代表成功寫入x的最年輕交易之timestamp
情況一: 當交易T提出read(x)操作之request
若Write-Ts(x) > Ts(T): 取消(Abort)交易T
若Write-Ts(x) <= Ts(T): 執行read(x)操作,
並設定Read-Ts(T) = Max(Ts(T), Read-Ts(T))
情況二: 當交易T提出write(x)操作之request
若Read-Ts(x) > Ts(T) 或 Write-Ts(T) > Ts(T): 取消(Abort)交易T
若以上不成立: 執行write(x)操作, 並設定Write-Ts(T) = Ts(T)
2. 疑問:
(1) 上述的取消(Abort)交易T, 是指整個交易T取消(Abort),
還是只有read(x)/write(x)之request取消而已呢?
(2) 為何情況二是設定Write-Ts(T) = Ts(T),
而不是設定Write-Ts(T) = Max(Ts(T), Write-Ts(T))呢?
我的前提(3)定義Write-Ts(x)為成功寫入x的最年輕交易之timestamp, 錯了嗎?
(3) 在前提說明的情況一(read(x) request)中,
下圖中這兩個情境有何不同呢?
http://i.imgur.com/XFoOjZp.jpg
為何圖中第一個情境要取消(Abort), 第二個卻要執行read(x)操作?
原本我是想說Write-Ts(x) > Ts(T)時會有造成衝突Cycle的可能性,
所以要保守一點, 將其取消(Abort), 但看起來第二個情境也有衝突Cycle的可能~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.228.186.18
※ 文章網址: https://www.ptt.cc/bbs/Database/M.1463877806.A.F09.html
→
05/24 10:23, , 1F
05/24 10:23, 1F
Database 近期熱門文章
PTT數位生活區 即時熱門文章