在DBMS中,什么是可串行化(serializability)?
如果一个调度等价于一个串行调度,则称该调度是可串行化的。并发调度必须确保其执行结果与串行执行(即一个接一个地执行)相同。它指的是一系列操作(如读取、写入、中止、提交)以串行方式执行的顺序。
示例
让我们假设有两个事务 T1 和 T2,
如果这两个事务在执行过程中互不干扰,则称为串行调度,可以表示如下:
T1 | T2 |
---|---|
READ1(A) | |
WRITE1(A) | |
READ1(B) | |
C1 | |
READ2(B) | |
WRITE2(B) | |
READ2(B) | |
C2 |
**非串行调度** - 当一个事务与事务 T1 和 T2 之间发生重叠时。
示例
考虑以下示例:
T1 | T2 |
---|---|
READ1(A) | |
WRITE1(A) | |
READ2(B) | |
WRITE2(B) | |
READ1(B) | |
WRITE1(B) | |
READ1(B) |
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
可串行化的类型
可串行化主要有两种类型:
视图可串行化
如果一个调度在视图上等价于一个串行调度,则称该调度是视图可串行化的。
它遵循以下规则:
T1 读取 A 的初始值,然后 T2 也读取 A 的初始值。
T1 读取 T2 写入的值,然后 T2 也读取 T1 写入的值。
T1 写入最终值,然后 T2 也对最终值进行写操作。
冲突可串行化
它以与某些串行执行相同的方式对任何冲突操作进行排序。如果两个操作作用于同一个数据项,并且其中一个操作是写操作,则称这两个操作发生冲突。
这意味着
Readi(x) readj(x) - 非冲突 读-读操作
Readi(x) writej(x) - 冲突 读-写操作。
Writei(x) readj(x) - 冲突 写-读操作。
Writei(x) writej(x) - 冲突 写-写操作。
广告