通常,有以下三种类型的时间表:
1. 可恢复时间表 –
如果计划如名称所示是可恢复的,则称它是可恢复的。在对相同数据进行写操作之前只允许读取。仅允许读取 (Ti->Tj)。
例子 –
S1: R1(x), W1(x), R2(x), R1(y), R2(y),
W2(x), W1(y), C1, C2;
给定的时间表遵循Ti->Tj => C1->C2 的顺序。事务 T1 在 T2 之前执行,因此不会发生冲突。 R1(x) 出现在 W1(x) 之前,事务 T1 在 T2 之前提交,即第一个事务的完成对数据项 x 执行第一次更新,因此给定的时间表是可恢复的。
让我们看一个不可恢复的时间表的例子来更清楚地了解这个概念:
S2: R1(x), R2(x), R1(z), R3(x), R3(y), W1(x),
W3(y), R2(y), W2(z), W2(y), C1, C2, C3;
Ti->Tj => C2->C3但 W3(y) 在 W2(y) 之前执行会导致冲突,因此它必须在 T2 事务之前提交。所以给定的时间表是不可恢复的。如果Ti->Tj => C3->C2在时间表中给出,那么它将成为可恢复的时间表。
注意:提交的事务永远不应该回滚。这意味着从未提交的事务中读取值并提交它会使当前事务进入不一致或不可恢复的状态,这称为脏读问题。
例子:
2. 无级联时间表 –
当没有读或写写事务然后相应日程的执行之前发生被称为cascadeless时间表。
例子 –
S3: R1(x), R2(z), R3(x), R1(z), R2(y), R3(y), W1(x), C1,
W2(z), W3(y), W2(y), C3, C2;
在这个调度中W3(y)和W2(y)覆盖冲突并且没有读取,因此给定的调度是无级联调度。
特例 –
希望中止的已提交事务。如下所示,所有事务都在读取已提交的数据,因此它是无级联调度。
3. 严格的时间表——
如果调度在提交前不包含读取或写入,则称为严格调度。严格的时间表本质上是严格的。
例子 –
S4: R1(x), R2(x), R1(z), R3(x), R3(y),
W1(x), C1, W3(y), C3, R2(y), W2(z), W2(y), C2;
在这个时间表中,在提交之前没有出现读写或写-写冲突,因此它的时间表很严格:
4. 级联中止 –
级联中止也可以回滚。如果事务 T1 中止,因为 T2 读取由 T1 写入的未提交的数据。因此它是级联回滚。
例子:
Strict、Cascadeless 和 Recoverable 调度之间的相关性:
从上图:
- 严格的调度都是可恢复的和无级联的调度
- 所有无级联计划都是可恢复的