DBMS 冲突可串行化

DBMS 冲突可串行化,在 DBMS 调度中,我们了解到有两种类型的调度 – 串行和调度。非串联。串行调度不支持并发执行事务,而非串行调度支持并发。我们还在可串行化 中了解到,非串行调度可能会使数据库处于不一致状态,因此我们需要检查这些非串行调度以获得可串行化。

冲突可串行化是可串行化类型之一,可用于检查非串行调度是否可冲突串行化。

什么是冲突可串行化?

如果我们可以在交换其非冲突操作后将其转换为串行调度,则调度称为冲突可串行化。

冲突的操作

如果它们满足以下三个条件,则说两个操作存在冲突:

  1. 这两项业务都属于不同的事务。
  2. 两个操作都在同一个数据项上运行。
  3. 至少有一个操作是写操作。

让我们看一些例子来理解这一点:

示例 1:事务T1的操作W(X)和事务T2的操作R(X)是冲突操作,因为它们满足上述所有三个条件。它们属于不同的事务,它们正在处理相同的数据项 X,这是写操作中的一个操作。

示例 2:类似地,T1的操作W(X)T2W(X)是冲突操作。

示例 3:T1的操作W(X)T2W(Y)是非冲突操作,因为两个写操作都不在同一数据项上工作,因此这些操作不满足第二个条件。

示例 4:类似地,T1R(X)T2R(X)是非冲突操作,因为它们都不是写操作。

示例 5:类似地,T1R(X)T1W(X)是非冲突操作,因为两个操作属于同一事务T1

冲突等价调度

如果在交换非冲突操作之后可以将一个调度转换为其他调度,则称两个调度是冲突等效。

冲突可串行化检查

让我们检查一个调度是否可以冲突串行化。如果调度冲突等同于其序列调度,则称为冲突可串行化调度。让我们举几个调度的例子。

冲突可串行化的示例

让我们考虑这个调度:

T1         T2
-----     ------
R(A)
R(B)
          R(A)
          R(B)
          W(B)
W(A)

要将此调度转换为连续调度,我们必须将事务T2R(A)操作与事务T1W(A)操作交换。但是我们不能交换这两个操作,因为它们是冲突操作,因此我们可以说这个给定的调度是而不是冲突可串行化

让我们再看一个例子:

T1         T2
-----     ------
R(A)
          R(A)
          R(B)
          W(B)
R(B)
W(A)

交换非冲突操作

在交换T1R(A)T2R(A)后,我们得到:

T1         T2
-----     ------
          R(A)
R(A)
          R(B)
          W(B)
R(B)
W(A)

在交换T1R(A)T2R(B)后,我们得到:

T1         T2
-----     ------
          R(A)
          R(B)
R(A) 
          W(B)
R(B)
W(A)

在交换T1R(A)T2W(B)后,我们得到:

T1         T2
-----     ------
          R(A)
          R(B)
          W(B)
R(A)         
R(B)
W(A)

在交换所有非冲突操作后,我们终于得到了一个连续的调度,因此我们可以说给定的调度是冲突可串行化

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程