【发布时间】:2012-11-29 04:04:21
【问题描述】:
在数据库理论中,“冲突可序列化”和“冲突等效”有什么区别?
我的教科书有一节关于可序列化的冲突,但忽略了冲突等价。这可能是我熟悉的两个概念,但我不熟悉术语,所以我正在寻找解释。
【问题讨论】:
标签: database conflict serializable equivalence
在数据库理论中,“冲突可序列化”和“冲突等效”有什么区别?
我的教科书有一节关于可序列化的冲突,但忽略了冲突等价。这可能是我熟悉的两个概念,但我不熟悉术语,所以我正在寻找解释。
【问题讨论】:
标签: database conflict serializable equivalence
DBMS 中的冲突可以定义为两个或多个不同的事务访问同一个变量,并且其中至少一个是写操作。
例如:
T1: Read(X)
T2: Read (X)
在这种情况下没有冲突,因为两个事务都在执行读取操作。
但在以下情况下:
T1: Read(X)
T2: Write(X)
有冲突。
假设我们有一个时间表S,我们可以重新排序其中的说明。并创建另外 2 个计划 S1 和 S2。
冲突等效:指的是计划S1 和S2,它们在这两个计划中维护冲突指令的顺序。例如,如果T1 必须在T2 将X 写入S1 之前读取X,那么在S2 中也应该是相同的。 (应该只为有冲突的操作维护顺序)。
冲突可串行化:如果S 与串行调度等效(即事务一个接一个地执行),则称它是可冲突串行化的。
【讨论】:
来自Wikipedia。
如果满足以下条件,则称计划 S1 和 S2 是冲突等效的:
S1 和 S2 的计划都涉及相同的事务集(包括每个事务中的操作顺序)。
S1和S2中每对冲突动作的顺序相同。
当调度冲突等效于一个或多个串行调度时,调度被称为是可冲突串行化的。
冲突可序列化的另一个定义是,当且仅当它的优先级图/可序列化图是非循环的,当且仅当它的优先级图/可序列化图是非循环的(如果该图定义为还包括未提交的事务,则可能会发生涉及未提交事务的循环而不会违反可串行化冲突)。
【讨论】:
只有两个术语可以用不同的方式描述一件事。
冲突等价:你需要说Schedule A和Schedule B是冲突等价的。它必须涉及两个schedule
冲突可序列化:仍然使用 Schedule A 和 B。我们可以说 Schedule A 是可冲突可序列化的。附表 B 是冲突可序列化的。
我们没有说 Schedule A/B 是冲突等价的
我们没有说 Schedule A 与 Schedule B 冲突可序列化
【讨论】:
如果一个调度 S 可以通过一系列非冲突指令的交换转换为一个调度 S´,我们说 S 和 S´ 是冲突等价的。
如果一个调度 S 与串行调度是等价的,我们就说它是冲突可串行化的。
【讨论】:
冲突可串行化意味着冲突等同于任何串行调度。
【讨论】:
冲突等价调度:如果调度 S 可以通过一系列非冲突指令的交换转换为调度 S',我们说调度 S & S' 是冲突等价的。 p>
冲突可序列化调度:如果调度 S 与串行调度等效,则它是可冲突序列化的。
【讨论】:
定义已经被完美地解释了,但我觉得这对某些人来说非常有用。
我开发了一个small console program(在 github 上),它可以测试任何计划的冲突可序列化性,并且还会绘制优先图。
【讨论】:
如果考虑的事务调度至少有一个冲突等效调度,则它是冲突可序列化的。
【讨论】: