如果满足以下条件,则两个调度 S1 和 S2 被称为视图等效:
1) 初始读取
如果事务 T1 从 S1 中的数据库读取数据项 A,那么在 S2 中 T1 也应该从数据库中读取 A。
T1 T2 T3
-------------------
R(A)
W(A)
R(A)
R(B)
事务 T2 正在从数据库读取 A。
2)更新阅读
如果 Ti 正在读取由 S1 中的 Tj 更新的 A,那么在 S2 中 Ti 也应该读取由 Tj 更新的 A。
T1 T2 T3 T1 T2 T3
------------------- ----------------
W(A) W(A)
W(A) R(A)
R(A) W(A)
以上两个时间表在 S1 中不是视图等效的:T3 正在读取由 T2 更新的 A,在 S2 T3 正在读取由 T1 更新的 A。
3)最终写操作
如果事务 T1 最后在 S1 中更新了 A,那么在 S2 中 T1 也应该执行最终的写操作。
T1 T2 T1 T2
------------ ---------------
R(A) R(A)
W(A) W(A)
W(A) W(A)
以上两个调度不是视图等效的,因为 S1 中的最终写入操作由 T1 完成,而 S2 中的最终写入操作由 T2 完成。
视图可序列化:如果视图等于串行调度(没有重叠事务),则调度称为视图可序列化。
以下是关于此主题的上一个 Year Gate 问题
https://www.geeksforgeeks.org/dbms-gq/transactions-and-concurrency-control-gq/