我的理解是冲突序列化意味着可序列化。我不确定这是如何使他们与众不同的。序列化是否意味着冲突可序列化?
答案 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)
对冲突行为的理解的简单定义:
如果日程表与某些串行日程表冲突,则该日程表可以冲突序列化。每个冲突的可序列化时间表都是可序列化的。
以上示例是可序列化的,但不是可序列化的冲突。没有这样的序列具有相同的冲突动作。可序列化,因为它仍然实现与串行T1-> T2-> T3的并发,但是不共享冲突的动作。在示例中,与串行相反,T1和T2的写入顺序不同。
答案 5 :(得分:0)
可序列化具有两种类型:冲突和视图。 可序列化冲突确定一个时间表是否等效于某个串行时间表,以使冲突操作(R-W或W-R或W-W)保持与原始时间表相同的顺序。