📜  DBMS中基于图形的并发控制协议

📅  最后修改于: 2021-09-08 15:39:25             🧑  作者: Mango

基于图形的协议是实现基于锁的协议的另一种方式。

正如我们所知,基于锁的协议的主要问题是避免死锁并确保严格的时间表。我们已经看到,遵循 Strict 或 Rigorous 2-PL 可以使用 Strict Schedules。我们甚至已经看到如果我们遵循 Conservative 2-PL 就可以避免死锁,但是这个协议的问题是它不能实际使用。基于图的协议被用作 2-PL 的替代方案。基于树的协议是基于图的协议的简单实现

该协议的先决条件是我们知道访问数据库项的顺序。为此,我们对一组数据库项 (D) {d 1 , d 2 , d 3 , ….., d n }实施部分排序。执行部分排序后的协议声明为-

  • 如果d I – > 然后访问之前,访问这两个d i必须访问d的任何事务。
  • 意味着集合D现在可以被视为一个有向无环图 (DAG),称为数据库图

基于树的协议 –

  • 数据库项目的部分顺序决定了树状结构。
  • 只允许使用排他锁。
  • T i的第一个锁可以在任何数据项上。随后,只有当 Q 的父节点当前被 T i锁定时,数据 Q 才能被 T i锁定。
  • 数据项可以随时解锁。

遵循基于树的协议可确保冲突可串行化和无死锁调度。我们不需要像在 2-PL 协议中那样等待解锁数据项,从而增加了并发性。

现在,让我们看一个示例,以下是一个数据库图,将用作后续锁定项目的参考。

222
图像 –数据库图

让我们看一个基于上述数据库图的示例。我们在这个调度中有三个事务,这是一个骨架示例,即,我们将只看到锁定和解锁的工作原理,让我们保持简单,不要通过添加数据操作来使其复杂。

T1 T2 T3
1 Lock-X(A)
2 Lock-X(B)
3 Lock-X(D)
4 Lock-X(H)
5 Unlock-X(D)
6 Lock-X(E)
7 Lock-X(D)
8 Unlock-X(B)
9 Unlock-X(E)
10 Lock-X(B)
11 Lock-X(E)
12 Unlock-X(H)
13 Lock-X(B)
14 Lock-X(G)
15 Unlock-X(D)
16 Unlock-X(E)
17 Unlock-X(B)
18 Unlock-X(G)

从上面的例子中,首先看到调度是Conflict Serializable。锁的可串行化可以写成T 2 –> T 1 –> T 3
Locked 和 Unlocked 数据项遵循与上述相同的规则并遵循数据库图。

因此,让我们再次修改基于图形的协议的关键点。
优势 –

  • 确保冲突可序列化计划。
  • 确保无死锁调度
  • 可以随时解锁

有一些优点也有一些缺点。
坏处 –

  • 有时可能会发生不必要的锁定开销,比如如果我们想要 D 和 E,那么至少我们必须锁定 B 以遵循协议。
  • 级联回滚仍然是一个问题。我们不遵循何时可能发生解锁操作的规则,因此此协议仍然存在此问题。

    总的来说,该协议因其实现死锁自由的独特方式而广为人知并被使用。

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