[討論] timestamp ordering 同步控制問題

看板Database (資料庫)作者 (新麗仕人)時間8年前 (2016/05/22 08:43), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/1
資料庫同步控制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
(3)的二因T'先write,write-Ts(x)設為Ts(T'),T再read?
05/24 10:23, 1F
文章代碼(AID): #1NGG2ky9 (Database)
文章代碼(AID): #1NGG2ky9 (Database)