如何在冲突可序列化中执行交换操作? 您所在的位置:网站首页 冲突可序列化 如何在冲突可序列化中执行交换操作?

如何在冲突可序列化中执行交换操作?

2024-07-15 02:45| 来源: 网络整理| 查看: 265

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 实验室设备网 版权所有