📜  查看DBMS中的可序列化性

📅  最后修改于: 2021-08-27 18:18:13             🧑  作者: Mango

先决条件– DBMS中的日程表类型
视图可序列化性是一个概念,用于计算计划是否可视图序列化。如果时间表与序列时间表(在其中无法进行事务交织)等效,则该时间表被称为“视图可序列化”。

为什么我们需要使用View-Serializability?
可能有一些时间表无法进行冲突可序列化,但仍会给出一致的结果,因为当时间表的优先级图包含循环/周期时,冲突可序列化的概念将受到限制。在这种情况下,我们无法预测时间表是一致还是不一致。按照冲突可序列化的概念,我们可以说调度是可冲突化的(意味着序列且一致),前提是其相应的优先级图没有任何循环/周期。

但是,如果日程表的优先级图包含一个循环/循环,并且由于冲突可序列化的日程表而给出一致的结果/准确的结果,该怎么办?
因此,为了解决这种情况,我们引入了View-Serializability的概念,因为我们不希望将概念可序列化性仅局限于Conflict-Serializability。

示例:首先通过时间表S 1了解视图可序列化

T1 T2 T3
a=100
read(a)
a=a-40
write(a) //60
a=a-40
write(a) //20
a=a-20
write(a) //0

因此,其冲突优先级图如下所示–

上图包含周期/循环,这意味着它不能冲突序列化,但并不意味着它不能保持一致,并且等效于可能或可能不是的串行计划。 LookSchedule S” 1:
在上面的示例中,如果我们确实在某些事务的操作之间进行了交换,那么我们的表将如下所示:

T1 T2 T3
a=100
read(a) //100
a=a-40
write(a) //60
a=a-40
write(a) //20
a=a-20
write(a) //0

其优先级图如下所示–

现在,我们看到第二个表的优先级图不包含任何循环/循环,这意味着它可冲突地序列化(等效于串行调度,一致),并且最终结果与第一个表相同。

注意:在上面的示例中,我们了解到,如果时间表是可序列化的冲突,那么我们可以很容易地预测到:

  1. 等效于序列表,
  2. 持续的,
  3. 还有View-Serializable。

但是,如果它是非冲突可序列化的(优先级图包含循环),该怎么办。在这种情况下,我们无法预测它是否一致和可序列化。正如我们看在上述例子中,其中所述时间表S1优先图是给一致的结果,相当于附表S” 1的序列化的结果尽管含有周期/循环。因此,为解决冲突可序列化概念的局限性,视图可序列化方法应运而生。

检查计划的视图可序列化的方法–

方法1:
如果同意以下条件,则可以说两个时间表S 1和S 2等效于视图–转到链接:点3

方法2:
首先,检查给定的时间表是“非冲突可序列化”还是“冲突可序列化” –

  • 如果给定的时间表是可冲突序列化的(意味着其优先级图不包含任何循环/周期),则给定的时间表必须是可序列化的视图。停止并提交您的最终答案。
  • 如果给定的时间表是非冲突可序列化的,则它可能是视图可序列化的,也可能不是视图可序列化的。我们不能仅使用冲突可序列化的概念来预测它,因此我们需要研究以下情况。

执行上述步骤后,如果发现提供的时间表不冲突,则需要执行以下步骤–
盲写:执行写操作(更新),而不进行读操作,这种写操作称为盲写。

  • 如果不存在盲写,则该日程表必须是不可视图序列化的日程表。停止并提交您的最终答案。
  • 如果存在任何盲写,那么在这种情况下,该计划可能是视图可序列化的,也可能是不可序列化的。因此,我们需要查看以下情况。因为,如果它不包含任何盲写内容,那么我们可以肯定地说该计划将不可进行View-Serializable。
  • 如果以上两个条件都不起作用{意味着我们已经尝试了以上两个条件,那么我们就进入了这一步}。然后,使用这些依赖关系绘制一个优先级图。如果图形中不存在任何循环/循环,则该计划将是“可视图序列化”的视图,否则不可以。

问题:证明给定的时间表是否可以进行View-Serializable?

S' : read1(A), write2(A), read3(A), write1(A), write3(A)

解决方案:首先,我们将制作一张表格,以更好地了解时间表S’-的给定交易

T1 T2 T3
read(a)
write(a)
read(a)
write(a)
write(a)
  • 首先,我们检查它是否可以进行冲突可序列化,因为如果可以进行冲突可序列化,那么它也可以进行视图可序列化,因此我们将为时间表S’创建一个优先级图。

  • 在这里,我们将检查Schedule的是否包含任何盲写。我们发现调度s’在事务T2中包含盲写write2(a)。因此,时间表S’可以是或可以不是视图可序列化的。因此,我们将看看另一种方法。因为,如果它不包含任何盲写功能,那么我们可以肯定地说该计划将无法进行View-Serializable。
  • 现在,我们将绘制一个与优先级图不同的依赖关系图。

其依赖关系图将如下所示–

  • 事务T 1首先读取data_item“ a”,事务T 2 首先更新(写) “ a”。
  • 因此,事务T 1必须在T 2之前执行。
  • 这样,我们就可以在图中获得相关性(T 1 →T 2 )
  • 并且,通过事务T 3最终对“ a”进行更新(写入)
  • 因此,事务T 3必须在所有其他事务(T 1 ,T 2 )之后执行。
  • 因此,我们在图中获得了依赖性(T 1 ,T 2 )→T 3

由于在依赖图中没有循环/循环,因此时间表s’是可视图序列化的。