解释 DBMS 中的时间戳排序协议
时间戳排序协议确保事务在发生冲突的读写操作中能够实现序列化。协议系统负责根据事务的时间戳值执行冲突的任务对。
当较旧的事务尝试读取/写入已被较新的事务读取或写入的值时,就会发生冲突。只有当该数据项的最后一次更新是由较旧的事务执行的时,读取或写入才会继续。
否则,请求读取/写入的事务将重新启动并提供新的时间戳。这里没有使用锁,所以没有死锁。
事务 Ti 的时间戳记为 TS(Ti)。
数据项 X 的读取时间戳记为 R-timestamp(X)。
数据项 X 的写入时间戳记为 W-timestamp(X)。
这些时间戳在对数据项 X 进行成功读写操作后更新。
如果发生操作冲突,较旧的事务优先于较新的事务。冲突通过回滚并重新启动事务来解决。
事务规则
为确保可串行化,使用以下规则 −
规则 1 −如果事务 Ti 发起 read(X) 操作。
如果 TS(Ti) < W-timestamp(X)
操作被拒绝。
如果 TS(Ti) >= W-timestamp(X)
操作执行。
所有数据项时间戳均已更新。
规则 2 − 如果事务 Ti 发起 write(X) 操作。
如果 TS(Ti) < R-timestamp(X)
操作被拒绝。
如果 TS(Ti) < W-timestamp(X)
操作被拒绝,Ti 回滚。
否则,操作执行。
Thomas'写入规则
此规则规定,如果 TS(Ti) < W-timestamp(X),则操作被拒绝,Ti 回滚。
可以修改时间戳排序规则,使调度视图可序列化。
"写入"操作本身被忽略,而不是使 Ti 回滚。
效果 − Thomas 写入规则允许此类操作,是对基本时间戳排序协议的修改。在 Thomas 写入规则中,用户会忽略过期的写入。
示例
S: f1(X) W2(X) W1(X)

检查时间戳排序协议是否允许调度 S。
解决方案
X-----------------RTS------3 X----------------WTS------4 For f1(X) : TS(Ti) <WTS(X) i.e TS(T1)<WTS(X) 3<0 (FALSE)
GOTO else 并执行写入操作 W2(X) AND WTS(X)=4
For W1(X): TS(Ti)<RTS(X) i.e TS(T1)<RTS(X) 3<3 (FALSE) TS(T1)<WTS(X) 3<4 (TRUE) ROLLBACK

