什么是冲突可串行化性?

3
我正在谷歌上阅读关于冲突可串行化和可串行化的内容,但我没有得到正确的定义以及可串行化和冲突可串行化之间的区别。我只知道一件事,那就是冲突可串行化意味着可串行化。在很多情况下,他们告诉我们,可串行化和冲突可串行化大多相同。请问有人能够解释什么是冲突可串行化,并且用例子说明可串行化和冲突可串行化之间的区别吗?谢谢!
3个回答

1

我找到了我的问题的答案。

Serializable 表示事务是按顺序进行的。这意味着如果调度已完成,但事务未使用相同的变量进行读取和写入,则不会发生冲突。

例如:

    T1                               T2

Read(X)
                                   Read(y)

Write(X) 
                                  Write(Y)

在这个例子中,这两个事务都没有使用共享变量。因此,在这里不存在冲突。
冲突可串行化意味着并发执行的事务。这两个事务使用相同的变量,事务的输出会产生冲突。
示例:
    T1                               T2

Read(X)
                                   Read(X)
                                   Write(X)

Write(X) 
Read(Y) 
Write(Y)
                                  Read(Y)
                                  Write(Y)

在这个例子中,两个事务T1和T2使用相同的变量。因此,事务T2在T1写入之前写入X。在T1写入X之后。在这里,没有使用事务T2的写入。这是冲突可串行化。

1
为了回答你的问题,我将首先解释几个术语,引用Galvin的操作系统书中的一句话。

串行调度:每个事务都是原子执行的调度称为串行调度,就像Premraj的答案所示。

同样地,当我们允许事务重叠执行时,即它们不再是原子性的,它们被称为非串行调度

冲突操作:这有助于查看非串行调度是否(不)等效于串行调度所表示的调度。如果两个连续操作访问相同的数据项,并且其中至少一个是写操作,则它们被认为是冲突的。

我们尝试找出并交换所有非冲突操作,如果给定的非串行调度可以转换为串行调度,我们说该调度是冲突可序的。

0

enter image description here

进度表:是一组事务的捆绑。

可串行性是事务进度的一个属性。它与数据库事务的隔离属性有关。进度的可串行性意味着等价于串行进度。

冲突可串行化可以发生在不可串行进度上,具备以下3个条件:

  • 它们必须属于不同的事务。
  • 它们必须对相同的值进行操作。
  • 至少其中一个应该有写操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接