如何在冲突可序列化中执行交换操作? | 您所在的位置:网站首页 › 冲突可序列化 › 如何在冲突可序列化中执行交换操作? |
swap表示将语句移动到所需的位置。因此swap是检测冲突可序列化的一个微不足道的术语。然而swaps of non-conflicting instruction是很重要的。 我可以这样做吗: 代码语言:javascript复制---------------------- |Ti | Tj | ---------------------- | write(Q) | | ---------------------- | read(Q) | | ---------------------- | write(Q) | | ---------------------- | | read(Q) | ---------------------- | | write(Q)| ---------------------- | | write(Q)| ----------------------不,我们不能做上面的操作。由于操作发生在Q 在事务结束时结束。交换不应该改变顺序。 或者我可以改变顺序吗? 不,不允许更改订单。更改顺序意味着更新事务,除非事务中止,否则不允许更新事务。 ![]() 因为我们有一个循环,所以操作不是冲突可序列化的。Serializable对于一致性和隔离要求很重要。正如我们所看到的,这个问题是由Ti导致, 如果我们去掉最后一句Ti 代码语言:javascript复制---------------------- |Ti | Tj | ---------------------- | write(Q) | | ---------------------- | | read(Q) | ---------------------- | read(Q) | | ---------------------- | | write(Q)| ---------------------- | | write(Q)| ----------------------现在,调度变成了冲突可序列化的。 交换怎么样? 如果情况类似于以下情况: 代码语言:javascript复制---------------------- |Ti | Tj | ---------------------- | write(Q) | | ---------------------- | | read(W) | ---------------------- | read(Q) | | ---------------------- | | write(W)| ---------------------- | | write(W)| ----------------------然后我们可以交换read(Q) 和 read(W) 使用 代码语言:javascript复制---------------------- |Ti | Tj | ---------------------- | write(Q) | | ---------------------- | read(Q) | | ---------------------- | | read(W) | ---------------------- | | write(W)| ---------------------- | | write(W)| ----------------------解释 交易Ti从写入Q列开始,而不读取Q的当前值。如果存在检查数据库的触发器,则可能会导致冲突。然后Ti 和 Tj两者都有read(Q)操作。突然Tj开始写作。然后Ti无需等待即可写入Tj去承诺。因此,从目前的状态来看,我们可以说情况是麻烦的。 |
CopyRight 2018-2019 实验室设备网 版权所有 |