DBMS 查看可串行化

DBMS 查看可串行化,前面我们学习了冲突可串行化。在本文中,我们将讨论另一种可串行化,即 查看可串行化

什么是查看可串行化?

查看可串行化是一个查找给定调度视图是否可串行化的过程。

要检查给定的调度是否可视化串行化,我们需要检查给定的调度是否对其序列调度 查看等价。让我们举个例子来理解我的意思。

给定调度:

T1        T2
-----     ------
R(X)
W(X)
          R(X)
          W(X)
R(Y)
W(Y) 
          R(Y)
          W(Y)

以上给定调度的串行调度:

我们知道在串行调度中,只有在当前运行的事务完成时才会启动事务。所以上面给出的调度的连续调度如下所示:

T1        T2
-----     ------
R(X)
W(X)
R(Y)
W(Y)
          R(X)
          W(X)
          R(Y)
          W(Y)

如果我们能够证明给定的调度对其连续调度 查看等价,那么给定的调度称为视图可串行

为什么我们需要查看可串行化?

我们知道,串行调度永远不会使数据库处于不一致状态,因为没有并发事务执行。但是,非串行调度可能会使数据库处于不一致状态,因为有多个事务同时运行。通过检查给定的非串行调度是否可视化串行化,我们确保它是一致的调度。

您可能想知道不是检查非串行调度是否可串行化,我们不能一直有串行调度吗?答案是否定的,因为事务的并发执行充分利用了系统资源,并且与串行调度相比要快得多。

查看等效

让我们学习如何检查两个调度是否相同。

如果它们满足以下所有条件,则称两个调度T1T2是等效视图:

  1. 初始读取:事务中每个数据项的初始读取必须在两个调度中都匹配。例如,如果事务T1在调度S1中的事务T2之前读取数据项X,则在调度S2中,T1应该在T2之前读取X
  2. 读取与初始读取:您可能会对术语初始读取感到困惑。这里初始读取意味着对数据项的第一次读取操作,例如,数据项X可以在调度中多次读取,但是对X的第一次读取操作称为初始读取。一旦我们在同一篇文章的下一部分中得到示例,这将更加清晰。

  3. 最终写入:每个数据项的最终写操作必须在两个调度中都匹配。例如,数据项X最后由事务T1在调度S1中写入,然后在S2中,对X的最后一次写操作应该由事务T1执行。

  4. 更新读取:如果在调度S1中,事务T1正在读取由T2更新的数据项,则在调度S2中,T1应该在相同数据项上的T2写操作之后读取该值。例如,在调度S1中,T1X上执行写入操作后对X执行读取操作,然后在 S2中,T1T2执行写入操作后读取X

查看可串行

如果调度视图等同于其序列调度,那么给定的调度称为查看可串行。让我们举个例子。

看可串行化示例

DBMS 查看可串行化

让我们检查一下可串行化的三个条件:

初始读取

在调度S1中,事务T1首先读取数据项X.在S2中,事务T1首先读取数据项X.

让我们检查Y.在调度S1中,事务T1首先读取数据项Y.在S2中,Y上的第一次读操作由T1执行。

我们检查了数据项X和在S1S1中满足Y初始读取条件。

最终写入

在调度S1中,X上的最终写操作由事务T2完成。在S2中,事务T2也在X上执行最终写入。

让我们检查Y.在调度S1中,Y上的最终写操作由事务T2完成。在调度S2中,Y上的最终写入由T2完成。

我们检查了数据项XY,在S1S2中,最终写入条件得到满足。

更新读取

S1中,事务 T2 读取由 T1 写入的 X 的值。在 S2 中,相同的事务 T2 在 T1 写入之后读取 X.

S1中,事务T2读取由T1写入的Y的值。在S2中,相同的事务T2T1更新之后读取Y的值。

两个调度也满足更新读取条件。

结果:由于在该示例中满足检查两个调度是否是视图等效的所有三个条件,这意味着S1S2是视图等效的。而且,正如我们所知,调度S2S1的连续调度,因此我们可以说调度S1是视图可串行化调度。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程