在DBMS中,什么是可串行化(serializability)?


如果一个调度等价于一个串行调度,则称该调度是可串行化的。并发调度必须确保其执行结果与串行执行(即一个接一个地执行)相同。它指的是一系列操作(如读取、写入、中止、提交)以串行方式执行的顺序。

示例

让我们假设有两个事务 T1 和 T2,

如果这两个事务在执行过程中互不干扰,则称为串行调度,可以表示如下:

T1T2
READ1(A)
WRITE1(A)
READ1(B)
C1

READ2(B)

WRITE2(B)

READ2(B)

C2

**非串行调度** - 当一个事务与事务 T1 和 T2 之间发生重叠时。

示例

考虑以下示例:

T1T2
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) - 冲突 写-写操作。

更新于: 2023年11月7日

57K+ 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告