📜  冲突和视图可序列化之间的区别

📅  最后修改于: 2021-08-27 04:01:30             🧑  作者: Mango

先决条件– DBMS中的日程表类型

可序列化的时间表:
如果事务计划的结果等于串行执行的事务的结果,即顺序执行而没有时间重叠,则该事务调度是可序列化的。可序列化的日程表始终使数据库保持一致状态。串行时间表始终是可序列化的时间表,因为新事务仅在较旧的事务完成执行后才开始。

例子 –
让我们考虑以下时间表,看看它是否可序列化。

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

现在,让我们弄清楚上面的时间表是否可序列化。

  1. 交换T1的R(X)和T2的R(Y)。
  2. 交换T1的R(X)和T2的W(Y)。
T1 T2
  R(X)
  R(Y)
  W(Y)
R(X)  
R(Y)  
W(X)  

因此,在初始计划中更改了冲突的操作后,我们得到了一个串行计划。因此,此计划是可序列化的。

可序列化时间表的类型:

  1. 结果等效时间表
  2. 冲突等效计划或冲突可序列化
  3. 查看等价时间表或查看可序列化性

冲突和视图可序列化之间的区别:

S.No. Conflict Serializability View Serializability
1. Two schedules are said to be conflict equivalent if all the conflicting operations in both the schedule get executed in the same order. If a schedule is a conflict equivalent to its serial schedule then it is called Conflict Serializable Schedule. Two schedules are said to be view equivalent if the order of initial read, final write and update operations is the same in both the schedules. If a schedule is view equivalent to its serial schedule then it is called View Serializable Schedule.
2. If a schedule is view serializable then it may or may not be conflict serializable. If a schedule is conflict serializable then it is also view serializable schedule.
3. Conflict equivalence can be easily achieved by reordering the operations of two transactions therefore, Conflict Serializability is easy to achieve. Viewequivalence is rather difficult to achieve as both transactions should perform similar actions in a similar manner. Thus, View Serializability is difficult to achieve.
4. For a transaction T1 writing a value A that no one else reads but later some other transactions say T2 write its own value of A, W(A) cannot be placed under positions where it is never read. If a transaction T1 writes a value A that no other transaction reads (because later some other transactions say T2 writes its own value of A) W(A) can be placed in positions of the schedule where it is never read.

冲突可串行性示例–
让我们考虑以下交易时间表,并对其进行冲突序列化测试

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

现在,我们将列出所有冲突的操作。此外,我们将使用优先图确定时间表是否可冲突序列化。

如果属于不同事务,对同一数据进行操作,则两个操作会发生冲突,并且至少其中之一是写操作。

  1. R3(X)和W2(X)[T3-> T2]
  2. W1(Y)和R3(Y)[T1-> T3]
  3. W1(Y)和W2(Y)[T1-> T2]
  4. R3(Y)和W2(Y)[T3-> T2]

构造优先级图,我们看到图中没有循环。因此,该计划是“可序列化冲突”。

可序列化的时间表是,

T1 -> T3 -> T2 

视图可序列化性示例–
让我们考虑以下事务时间表,并对其进行查看可序列化性测试。

T1 T2 T3
R(A)    
  W(A)  
    R(A)
W(A)    
    W(A)

我们知道,如果时间表是“可序列化的冲突”,那么它也是“可序列化的视图”。因此,首先让我们检查“冲突可序列化性”。

此计划的冲突操作是–

  1. R1(A)和W2(A)[T1-> T2]
  2. R1(A)和W2(A)[T1-> T3]
  3. W2(A)和R3(A)[T2-> T3]
  4. W2(A)和W1(A)[T2-> T1]
  5. W2(A)和W3(A)[T2-> T3]
  6. R3(A)和W1(A)[T3-> T1]
  7. W3(A)和W1(A)[T1-> T3]

为计划中的冲突操作构造优先级图。

正如我们看到的那样,优先级图中存在一个循环,这意味着给定的时间表不是“可冲突序列化”的。现在,在检查盲写时,我们得到在给定的时间表中存在盲写W2(A)。因此,该计划可能是视图可序列化的,也可能不是。

为了检查View的可序列化性,我们将绘制进度表的Dependency Graph。从给定的时间表中,我们收集到以下几点:

  1. T1在T2更新A之前读取A,因此,T1必须在T2之前执行。
  2. T3对A进行最终更新,因此必须最后执行。

构造依赖关系图。

由于图中没有周期,因此我们可以说给定的时间表是View Serializable。
可序列化的时间表是T1-> T2-> T3。