数据库管理系统 (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)

转到 else 并执行写入操作 W2(X) 和 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

更新于:2021年7月6日

15K+ 浏览量

启动你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.