📅  最后修改于: 2020-12-12 07:35:32             🧑  作者: Mango
如果两个计划S1和S2满足以下条件,则它们被视为等效视图:
两个时间表的初始读取必须相同。假设有两个时间表S1和S2。在计划S1中,如果事务T1正在读取数据项A,则在S2中,事务T1也应读取A。
上面的两个时间表是等效的视图,因为S1中的初始读取操作由T1完成,而S2中的初始读取操作也由T1完成。
在时间表S1中,如果Ti正在读取由Tj更新的A,则在S2中,Ti也应读取由Tj更新的A。
上面的两个时间表是不相等的,因为在S1中,T3读取由T2更新的A,而在S2中,T3读取由T1更新的A。
两个计划之间的最终写入必须相同。在调度表S1中,如果事务T1最后更新A,则在S2中,最后的写操作也应由T1完成。
由于S1中的最终写入操作由T3完成,而S2中的最终写入操作也由T3完成,因此以上两个时间表是相同的。
例:
附表S
有3笔交易,可能的时间表总数
= 3! = 6
S1 =
S2 =
S3 =
S4 =
S5 =
S6 =
采取第一时间表S1:
附表S1
步骤1:对数据项进行最终更新
在计划S和S1中,都没有读取,只有初始读取,这就是我们不需要检查该条件的原因。
步骤2:初始读取
S中的初始读取操作由T1完成,而S1中的初始读取操作也由T1完成。
步骤3:最终写入
S中的最终写操作由T3完成,而S1中的最终写操作也由T3完成。因此,S和S1是等效视图。
第一个时间表S1满足所有三个条件,因此我们无需检查另一个时间表。
因此,查看等效的串行时间表是:
T1 → T2 → T3