在某些情况下,遵循 thomas 写入规则的时间戳协议是否允许不可视图序列化的计划?

Vim*_*tel 7 concurrency timestamp serialization protocol

我在教科书(Avi Silberschatz、Henry F. Korth 和 S. Sudarshan $6e$ 的《数据库系统概念教科书》)中遇到了以下行。686:

Thomas 的写入规则允许不可冲突序列化但仍然正确的调度。那些允许的非冲突可序列化调度满足视图可序列化调度的定义(参见示例框)。

我从上面几行中了解到,遵循 Thomas 的写入规则的时间戳协议生成的每个时间表都是视图可序列化的。

现在让我们采用以下小时间表:$S:R_1(X)、W_2(X)、W_1(X)$。

这个时间表 $S$ 在时间戳协议下是允许的,该协议遵循 Thomas 的写入规则。

并且序列化顺序是 $R_1(X), W_1(X).$

但我无法证明它是视图可序列化的。

其实我认为它是非视图可序列化的,因为,

  1. 考虑串行顺序为 $T_1, T_2$

    现在 $X$ 的最终值由 $T_2$ 写入。所以不等价。

  2. 下一个替代序列是 $T_2, T_1$

    在这里,$R_1(X)$ 将读取由 $T_1$ 写入的 $X$ 的值,而不是在两个事务开始之前存在的原始值。所以这也不是视图等价的。

这里出了什么问题?请帮我解决这个问题。

Mic*_*een 5

给定的调度 S 是:

T1    T2
----  -----
R(X)
      W(X)
W(X)
Run Code Online (Sandbox Code Playgroud)

要成为视图可序列化的 W2(X) 必须在 R1(X) 之前或 W1(X) 之后移动。但是,第一个会违反“初始读取”规则,第二个会违反“最后写入”规则。

T2 在 T1 之后开始,因此具有更高的时间戳。当 T1 开始写入 X 时,它会看到 T2 的时间戳。根据 Thomas 的写入规则,T1 的写入是无效的,可以删除。给定的时间表然后变成

T1    T2
----  -----
R(X)
      W(X)
Run Code Online (Sandbox Code Playgroud)

现在 T2 的所有操作都发生在所有 T1 之后 - 计划被序列化。

(你在你的问题中反过来说,删除 W2(X)。我认为这是一个错误。)

为了证明一个调度是可序列化的,只需要表明至少有一个等价的调度是连续的。没有必要证明每一个可能的串行计划都是可以实现的。我同意 T2,T1 由于读/写依赖性而不是按原始时间表查看可序列化。但是,T1,T2 在 Thomas 写入规则下是可序列化的。