检查两个调度是否视图相等(DBMS)

dbmsdatabasebig data analytics更新于 2026/1/12 20:22:17

可串行化有两种类型,如下所示 −

视图可串行化

如果一个调度与一个串行调度视图等价,则该调度为视图可串行化。

它遵循的规则如下 −

  • T1 读取 A 的初始值,然后 T2 也读取 A 的初始值。

  • T1 是 T2 写入的读取值,然后 T2 也读取 T1 写入的值。

  • T1 写入最终值,然后 T2 也将写入操作作为最终值。

冲突可串行化

它以与某些串行执行。如果一对操作操作同一数据项,且其中一个是写操作,则称它们发生冲突。

这意味着:

  • Readi(x) readj(x) - 非冲突的读-读操作

  • Readi(x) writej(x) - 冲突的读-读操作

  • Writei(x) readj(x) - 冲突的写-读操作

  • Writei(x) writej(x) - 冲突的写-写操作

现在让我们看看这两个调度是否是视图等价的。

如果一个调度与一个串行调度在视图上等价,那么它就是视图可串行化的。如果满足以下三个规则,则调度是视图可序列化的 −

  • 规则 1 − 如果 Ti 先读取数据,则 Tj 在给定调度中写入相同的数据。事务组合(读写操作)必须遵循此顺序。

  • 规则 2 − 如果 Ti 先写入数据,则 Tj 在给定调度中读取相同的数据。事务组合(写读操作)必须遵循此顺序。

  • 规则 3 − 如果 Ti 写入数据,则 Tj 在给定调度中写入数据。事务组合(写写操作)必须遵循此顺序。

示例

R1(X) W2(X) W1(X),创建事务的所有可能组合。我们有 2 个事务,因此组合分别为 − <T1, T2> 和 <T2, T1>。

  • 规则 1 − T1 先读取数据,之后 T2 写入相同的数据,这意味着事务顺序必须是"T1 后跟 T2"。因此,删除以下组合,其中"T1 后不跟 T2",即 <T2, T1>

  • 规则 2 − T2 先写入数据,之后没有事务读取相同的数据。因此,我们保留所有事务组合,这意味着规则 2 不会删除任何组合。

  • 规则 3 − T1 最后写入数据,这意味着 T1 必须最后发生,因此请删除以下"t1 没有最后发生"的组合。<T1, T2>

因此,没有剩余的组合可以满足视图可序列化性。

结论

给定的调度不是视图可序列化的。


相关文章