冲突可序列化和可序列化之间有什么区别?

时间:2013-12-11 20:58:51

标签: conflict database

我的理解是冲突序列化意味着可序列化。我不确定这是如何使他们与众不同的。序列化是否意味着冲突可序列化?

6 个答案:

答案 0 :(得分:3)

冲突可序列化可序列化的子集。如果计划是冲突可序列化的,则暗示此计划是可序列化的。

在计算上更容易确定某些内容是否可冲突序列化而不是可序列化。只需构建一个precedence graph。如果图形是非循环的,那么这个模板与图形路径描述的某些串行调度冲突等效。

想象一下事务A B和C,都写到同一页面。 A写入,然后是B,然后是C,然后是A。没有可序列化的计划与冲突等效。首先必须先行,因为B和C在A之后有冲突。但A必须也是最后一个,因为B和C在A之前有冲突。因此图中的循环。

但仅仅因为它不是可串行化的冲突并不意味着它不可序列化。例如,如果A的最后一次写入与C的写入完全相同,那么ABC将是与原始写入相同的串行调度,因为最后一次写入并不是最终的问题。

答案 1 :(得分:2)

Conflict serializable是可序列化的一个子集,所以只是因为一个冲突序列化的计划表明它是可序列化的。

参见牛本书数据库管理系统第2版Ed Cha19.1.1 P541

  

每个冲突可序列化的时间表都是可序列化的。

可序列化但不可冲突的可序列化计划

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

这不是冲突可序列化的(通过优先级图表),但相当于可序列化的计划

T1 T2 T3

因为T3盲目在两个时间表中写入输出。

答案 2 :(得分:1)

Conflict serializable是视图可序列化的子集。 “调度可以是冲突序列化的,但不是可序列化的(如盲写的情况下)

答案 3 :(得分:0)

简单来说, 假设存在具有两个事务T1,T2的调度(S)。 设Result1,Result2为两个变量,其中 在运行T1然后运行T2之后产生Result1,即T1-> T2;(连续地) 在运行T2然后T1,即T2-> T1;(连续地)

之后产生结果2

现在假设我们交错两个事务的动作,让我们称之为调度S,现在如果在运行S之后产生的净结果等同于Result1或Result2,那么我们称之为可序列化。

但是,如果我们可以交换非冲突的操作并生成等于计划的连续计划,其中T1首先运行,然后运行T2(T1-> T2),或者首先运行T2,然后运行T1(T2-> T1),然后我们将其称为冲突可序列化的。

现在,如果某个计划是冲突可序列化的,那么它必然是可序列化的,因为它可以通过交换非冲突的操作而更改为某个序列顺序。

因此我们可以得出结论,每个冲突可序列化的时间表都是可序列化的,但并非所有可序列化的时间表都是冲突可序列化的。

答案 4 :(得分:0)

对冲突行为的理解的简单定义:

如果日程表与某些串行日程表冲突,则该日程表可以冲突序列化。每个冲突的可序列化时间表都是可序列化的。

enter image description here

以上示例是可序列化的,但不是可序列化的冲突。没有这样的序列具有相同的冲突动作。可序列化,因为它仍然实现与串行T1-> T2-> T3的并发,但是不共享冲突的动作。在示例中,与串行相反,T1和T2的写入顺序不同。

答案 5 :(得分:0)

可序列化具有两种类型:冲突和视图。 可序列化冲突确定一个时间表是否等效于某个串行时间表,以使冲突操作(R-W或W-R或W-W)保持与原始时间表相同的顺序。