- 如果时间表与序列时间表等效, 则它将查看可序列化的时间表。
- 如果时间表可序列化冲突, 那么它将可视图序列化。
- 与可序列化不冲突的可序列化视图包含盲写。
1.初始读取
两个时间表的初始读取必须相同。假设有两个时间表S1和S2。在计划S1中, 如果事务T1正在读取数据项A, 则在S2中, 事务T1也应读取A。
文章图片
上面两个时间表是等效的视图, 因为S1中的初始读取操作由T1完成, 而S2中的初始读取操作也由T1完成。
2.更新阅读
在时间表S1中, 如果Ti正在读取由Tj更新的A, 那么在S2中, Ti也应读取由Tj更新的A。
文章图片
上面的两个时间表是不相等的, 因为在S1中, T3读取由T2更新的A, 在S2中, T3读取由T1更新的A。
3.最终写
两个计划之间的最终写入必须相同。在时间表S1中, 如果事务T1最后更新了A, 则在S2中, 最后的写操作也应由T1完成。
文章图片
由于S1中的最终写入操作由T3完成, 而S2中的最终写入操作也由T3完成, 因此以上两个时间表的视图相等。
例:
文章图片
附表S
【DBMS视图可序列化】有3笔交易, 可能的时间表总数
= 3! = 6S1 = <
T1 T2 T3>
S2 = <
T1 T3 T2>
S3 = <
T2 T3 T1>
S4 = <
T2 T1 T3>
S5 = <
T3 T1 T2>
S6 = <
T3 T2 T1>
采取第一时间表S1:
文章图片
附表S1
步骤1:对数据项进行最终更新
在计划S和S1中, 没有读取, 只有初始读取, 这就是为什么我们不需要检查该条件的原因。
步骤2:初始读取
S中的初始读取操作由T1完成, 而S1中的初始读取操作也由T1完成。
步骤3:最终写入
S中的最终写操作由T3完成, 而S1中的最终写操作也由T3完成。因此, S和S1是等效视图。
第一个时间表S1满足所有三个条件, 因此我们不需要检查另一个时间表。
因此, 查看等效的串行时间表是:
T1→T2→T3
推荐阅读
- DBMS与文件系统
- DBMS基于验证的协议
- DBMS时间戳排序协议
- DBMS三种架构架构
- DBMS Thomas的写入规则
- DBMS第三范式(3NF)
- DBMS可串行性测试
- DBMS静态哈希解释
- DBMS事务状态介绍