在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) |
可串行化的类型
可串行化主要有两种类型:
视图可串行化
如果一个调度在视图上等价于一个串行调度,则称该调度是视图可串行化的。
它遵循以下规则:
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) - 冲突 写-写操作。
广告
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP