【问题标题】:What's the Difference between Conflict Serializable and Serializable?冲突可序列化和可序列化之间有什么区别?
【发布时间】:2013-12-30 01:19:48
【问题描述】:

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

【问题讨论】:

    标签: conflict database


    【解决方案1】:

    冲突可序列化是可序列化的子集,所以仅仅因为调度是冲突可序列化的就意味着它是可序列化的。

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

    每个冲突可序列化调度都是可序列化的。

    一个可序列化但不冲突的可序列化调度是

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

    这不是冲突可序列化的(按优先级图),但等效于可序列化调度

    T1 T2 T3
    

    因为 T3 盲目地在两个调度中写入输出。

    【讨论】:

    • 我认为你的意思是超集。
    • @YoGengoUnLCD 子集是正确的。有视图可序列化的计划(参见 fois 的示例)是不可冲突序列化的。每个冲突可序列化计划也是视图可序列化的。因此,冲突可序列化调度集是视图可序列化调度集的子集。
    【解决方案2】:

    冲突可序列化可序列化的子集。如果一个调度是冲突可序列化的,则暗示该调度是可序列化的。

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

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

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

    【讨论】:

    • 如果 Conf.可序列化是可序列化的子集,然后是每个conf。 serializable 是可序列化的(根据子集的定义)。例如。苹果是水果的子集,所以每个苹果都是水果,反之亦然(正如您在第一句话中所说的那样)。请您修复/澄清一下吗?
    • 子集还是超集?这与下面的答案相矛盾。
    【解决方案3】:

    冲突可序列化是视图可序列化的子集。 "调度可以是冲突序列化的,但不是视图序列化的(如盲写)

    【讨论】:

    • 我认为你的意思是超集。
    • 我明白你的意思。通过子集,我的意思是冲突可序列化所需的条件更少。
    • 确实,冲突可序列化计划是视图可序列化计划的子集,但您的第二句话不正确。时间表可以是 VIEW 可序列化的,但也不能是 CONFLICT 可序列化的(反之亦然)。
    【解决方案4】:

    简单来说, 假设有一个带有两个事务 T1,T2 的计划(S)。 令 Result1, Result2 为两个变量,其中 Result1 是在运行 T1 再运行 T2 后产生的,即 T1->T2;(串行) Result2 是在运行 T2 再运行 T1 后产生的,即 T2->T1;(串行)

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

    但是,如果我们可以交换不冲突的动作并生成一个等于的串行调度,其中 T1 先运行然后 T2(T1->T2),或者 T2首先运行,然后是 T1(T2->T1),然后我们称之为冲突序列化。

    现在,如果调度是可冲突序列化的,那么它必然是可序列化的,因为可以通过交换非冲突操作将其更改为某种序列顺序。

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

    【讨论】:

      【解决方案5】:

      理解冲突行为的直接定义:

      如果一个调度与某个串行调度等效,则它是可冲突串行化的。每个冲突可序列化调度都是可序列化的。

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

      【讨论】:

        【解决方案6】:

        Serializability 有两种类型:Conflict 和 View。 Conflict serializable 确定一个调度是否等同于某个串行调度,使冲突操作(R-W 或 W-R 或 W-W)保持与原始调度相同的顺序。

        【讨论】:

          猜你喜欢
          • 2012-11-29
          • 2016-01-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-14
          • 2013-04-30
          相关资源
          最近更新 更多