什么是冲突可序列化?

Posted

技术标签:

【中文标题】什么是冲突可序列化?【英文标题】:What is Conflict serializability? 【发布时间】:2016-01-22 15:48:05 【问题描述】:

我正在 google 中阅读有关冲突可序列化和可序列化的信息。

但我没有得到正确的定义以及可序列化和冲突可序列化之间的区别。

我只得到一件事。那就是冲突可序列化意味着可序列化。

在很多事情上,他们对可序列化和冲突可序列化说得最多的是相同的。

任何人都可以通过示例解释什么是冲突可序列化以及可序列化和可序列化之间的区别。

感谢您的提前!

【问题讨论】:

【参考方案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 写入。这就是冲突可序列化。

【讨论】:

【参考方案2】:

Schedule : 是一组事务。 可串行化是事务调度的属性。它与数据库事务的隔离属性有关。调度的可串行化意味着等同于串行调度。

在以下 3 个条件下,非可序列化计划可能会发生可序列化冲突:

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

【讨论】:

【参考方案3】:

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

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

同样,当我们允许交易重叠执行时, 即它们不再是原子的,它们被称为 Non Serial 时间表

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

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

【讨论】:

以上是关于什么是冲突可序列化?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 PostgreSQL 可序列化事务认为这是冲突?

什么是可序列化对象?

SQLAlchemy,以惯用的 Python 方式进行可序列化事务隔离和重试

dbms中锁定方法的特点

在Boost.MPI中使类可序列化是什么意思?

可序列化是啥意思?