时间戳排序协议

2024年12月27日 | 3分钟阅读
  • 时间戳排序协议根据事务的时间戳对事务进行排序。事务的顺序就是事务创建时间的升序。
  • 较早的事务优先级较高,因此它会首先执行。为了确定事务的时间戳,该协议使用系统时间或逻辑计数器。
  • 基于锁的协议用于在执行时管理事务之间冲突对的顺序。但是基于时间戳的协议在事务创建后立即开始工作。
  • 假设有两个事务T1和T2。假设事务T1在007时刻进入系统,事务T2在009时刻进入系统。T1具有更高的优先级,因此它首先执行,因为它首先进入系统。
  • 时间戳排序协议还维护数据上最后一次“读”和“写”操作的时间戳。

基本时间戳排序协议工作如下

基本时间戳排序方法确保所有冲突的读写操作都已执行。

1. 当事务Ti发出**Read (X)** 操作时,检查以下条件

  • 如果 W_TS(X) >TS(Ti),则操作被拒绝。
  • 如果 W_TS(X) <= TS(Ti),则操作被执行。
  • 所有数据项的时间戳都已更新。

2. 当事务Ti发出**Write(X)** 操作时,检查以下条件

  • 如果 TS(Ti) < R_TS(X),则操作被拒绝。
  • 如果 TS(Ti) < W_TS(X),则操作被拒绝,T_i回滚,否则操作被执行。

其中,

**TS(TI)** 表示事务Ti的时间戳。

**R_TS(X)** 表示数据项X的读取时间戳。

**W_TS(X)** 表示数据项X的写入时间戳。

TO协议的优点和缺点

  • TO协议确保了可串行化,因为优先图如下
    DBMS Timestamp Ordering Protocol
  • TS协议确保了无死锁,这意味着没有事务会等待。
  • 但是调度可能不可恢复,甚至可能不是无级联的。

为了说明这个机制,我们考虑两个事务T1和T2。两个事务都从A中减去200并将其添加到B。T1和T2的时间戳分别为下午5:29和下午5:30。最初所有系统时钟都设置为零。

一旦重新启动,事务T1将获取新的时间戳(例如下午5:31)。

调查表Read_TS(A)Write_TS(A)Read_TS(B)Write_TS(B)描述
T1: Read (A)5 : 29000T1读取后,Read_TS (A)变为5:29,并保持不变直到T1读取B。
T1: A: = A -2005 : 29000
T1: Read (B)5 : 2905 : 290现在Read_TS (A)和Read_TS(B)都变为5:29
T2: Read (A)5 : 3005 : 290使用规则1(b),由于5:30 > 5:29,所以Read_TS(A)被更新。
T2: Read (B)5 : 3005 : 300使用规则1(b),由于5:30 > 5:29,所以Read_TS(B)被更新。
T2: A: = A -200---
T2: B: = B + 200---无读或写操作。
T2: Write (A)5 : 305 : 305 : 300使用规则2(c),Write_TS (A)更新。
T2: Write (B)5 : 305 : 305 : 305 : 30使用规则2(c),Write_TS (B)更新。
T1: B: = B + 200--无读或写操作。
T1: Write (A)5 : 30冲突5 : 305 : 30使用规则2(b),由于5:30 > 5:29,所以事务T1被中止。
T1: Write (B)

可以验证,即使T1被中止,调度也会产生正确的结果,但这并非总是如此。这种方法保证了事务是冲突可串行化的,并且结果等同于事务按时间戳顺序执行的串行调度。基本时间戳排序方法将与所有事务一个接一个地执行而没有任何干扰相同。