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