📜  基于时间戳的并发控制

📅  最后修改于: 2021-09-10 02:32:20             🧑  作者: Mango

并发控制可以通过不同的方式实现。实现它的一种方法是使用锁。现在,让我们讨论时间戳排序协议。

如前所述,时间戳是由 DBMS 创建的唯一标识符,用于标识事务。它们通常按照提交到系统的顺序进行分配。将事务T的时间戳称为TS(T) 。关于 Timestamp 的基础知识,你可以参考这里。

时间戳排序协议 –
该协议的主要思想是根据时间戳对交易进行排序。然后,事务参与的调度是可序列化的,并且唯一允许的等效串行调度具有按时间戳值顺序排列的事务。简单地说,调度相当于与事务时间戳的顺序对应的特定串行顺序算法必须确保,对于调度中冲突操作访问的每个项目,访问项目的顺序不违反顺序。为确保这一点,请使用与每个数据库项X相关的两个时间戳值。

  • W_TS(X)是成功执行 write(X)的任何事务的最大时间戳。
  • R_TS(X)是成功执行 read(X)的任何事务的最大时间戳。

基本时间戳排序 –
每笔交易都会根据其进入系统的时间发布一个时间戳。假设,如果旧事务 T i具有时间戳 TS(T i ),则为新事务 T j分配时间戳 TS(T j ),使得TS(T i ) < TS(T j ) 。该协议管理并发执行,以便时间戳确定可序列化顺序。时间戳排序协议确保任何冲突的读写操作都按时间戳顺序执行。每当某个事务T尝试发出 R_item(X) 或 W_item(X) 时,基本 TO 算法将T的时间戳与R_TS(X) 和 W_TS(X)进行比较,以确保不违反时间戳顺序。这里描述了以下两种情况下的 Basic TO 协议。

  1. 每当事务T发出W_item(X)操作时,检查以下条件:
    • 如果R_TS(X) > TS(T)W_TS(X) > TS(T) ,则中止并回滚 T 并拒绝操作。别的,
    • 执行 T 的 W_item(X) 操作并将 W_TS(X) 设置为 TS(T)。
  2. 每当事务T发出R_item(X)操作时,请检查以下条件:
    • 如果W_TS(X) > TS(T) ,则中止并拒绝 T 并拒绝操作,否则
    • 如果 W_TS(X) <= TS(T),则执行 T 的 R_item(X) 操作并将 R_TS(X) 设置为 TS(T) 和当前 R_TS(X) 中的较大者。

每当基本 TO 算法检测到两个以错误顺序发生的冲突操作时,它就会通过中止发出它的事务来拒绝这两个操作中的后一个。由 Basic TO 生成的计划保证是冲突可序列化的。已经讨论过使用 Timestamp 可以确保我们的日程安排不会出现死锁

Basic TO 协议的一个缺点是级联回滚仍然是可能的。假设我们有一个事务 T 1并且 T 2使用了由 T 1写入的值。如果 T 1被中止并重新提交给系统,那么 T 也必须被中止并回滚。所以级联中止的问题仍然存在。

让我们总结一下基本 TO 协议的优缺点:

  • 时间戳排序协议确保可序列化,因为优先级图将采用以下形式:

22

图像 – TS 排序的优先图

  • 时间戳协议确保免于死锁,因为没有事务等待。
  • 但是时间表可能不是级联自由的,甚至可能无法恢复。

严格的时间戳排序 –
Basic TO 的一种变体称为Strict TO,可确保调度既是 Strict 又是 Conflict Serializable。在此变体中,事务 T 发出 R_item(X) 或 W_item(X) 使得 TS(T) > W_TS(X) 的读取或写入操作延迟,直到写入 X 值的事务 T ‘ 已提交或中止。

相关的 GATE 问题 –

  1. 门|门CS 2010 |问题 20
  2. 门| GATE-CS-2017(套装1)|第 46 题
  3. 门| GATE-IT-2004 |问题 21

参考:数据库系统概念,第五版 [Silberschatz、Korth、Sudarshan],第 16 章