[讨论] 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