数据库管理系统 (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
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP