解释 DBMS 中的时间戳排序协议

dbmsdatabasebig data analytics更新于 2026/1/13 0:07:17

时间戳排序协议确保事务在发生冲突的读写操作中能够实现序列化。协议系统负责根据事务的时间戳值执行冲突的任务对。

当较旧的事务尝试读取/写入已被较新的事务读取或写入的值时,就会发生冲突。只有当该数据项的最后一次更新是由较旧的事务执行的时,读取或写入才会继续。

否则,请求读取/写入的事务将重新启动并提供新的时间戳。这里没有使用锁,所以没有死锁。

  • 事务 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

相关文章