【问题标题】:Is a strict schedule always serializable?严格的时间表总是可序列化的吗?
【发布时间】:2016-11-29 06:51:03
【问题描述】:

在 DBMS 中,严格的调度总是可序列化的吗?

如果答案是否定的,那么请提供一个不可序列化的严格时间表示例。

【问题讨论】:

    标签: database concurrency


    【解决方案1】:

    (对于以下内容,我假设冲突可序列化。)

    不,严格的时间表并不总是可序列化的。以下时间表是严格的(在提交之前不读取或覆盖数据项),但不可序列化(有两个冲突对:r_1[x] 和 w_2[x] & w_2[x] 和 w_1[x],但是它们的顺序不同)。下标1的操作属于事务T_1,下标2的属于事务T_2。

    r_1[x] w_2[x] c_2 w_1[x] c_1
    

    与上面给出的答案相反,可序列化的时间表不一定严格。请参阅以下示例:

    w_1[x] w_2[x] c_2 r_1[y] c_1
    

    事务 T_2 在提交 T_1 之前覆盖了 T_1 的 w_1[x]。然而,调度(冲突)等同于串行调度 T_1 T_2。

    【讨论】:

      【解决方案2】:

      每个可序列化的时间表都是严格的。 但是每一个严格的时间表都不是可序列化的。

      如果一个调度的结果等于其串行执行的事务的结果,即没有交错事务,则调度是一个可序列化的调度。

      然而,严格的调度是指其他事务 T2 无法读取或写入 T1 写入的数据,除非它被提交。

      例如,

      换句话说,在 Strict schedule 中,T2 可以读取 T1 正在读取的数据,但是一旦 T1 写入数据,从那时到它提交的时间,T2 就无法读取或写入数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-01
        • 2020-06-07
        • 2016-11-16
        • 2014-04-25
        • 2020-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多