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

作者: newlinuxer (新麗仕人)   2016-05-22 08:43:20
資料庫同步控制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的可能~
作者: flowwinds (..)   2016-05-24 10:23:00
(3)的二因T'先write,write-Ts(x)設為Ts(T'),T再read?

Links booklink

Contact Us: admin [ a t ] ucptt.com