先决条件– 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 |
其优先级图如下所示–
现在,我们看到第二个表的优先级图不包含任何循环/循环,这意味着它可冲突地序列化(等效于串行调度,一致),并且最终结果与第一个表相同。
注意:在上面的示例中,我们了解到,如果时间表是可序列化的冲突,那么我们可以很容易地预测到:
- 等效于序列表,
- 持续的,
- 还有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’是可视图序列化的。