如果视图相当于一个串行调度,那么视图将序列化。
如果调度是冲突可序列化的,那么它将是可序列化的。
可序列化的视图可序列化包含盲写。
如果满足以下条件,则两个调度S1和调度S2被视为等效视图:
两个调度的初始读数必须相同。 假设有两个调度S1和S2。 在调度S1中,如果事务T1正在读取数据项A,则在S2中,事务T1也应该读取A。
以上两个调度表是等效视图,因为S1中的初始读操作由T1完成,而在S2中,它也由T1完成。
在调度S1中,如果Ti正在读取由Tj更新的A,那么在S2中,Ti也应该读取由Tj更新A。
以上两个调度表不是相同的,因为在S1中,T3读取A由T2更新,而在S2中,T3读取A由T1更新。
两个调度之间的最终写入必须相同。 在时间表S1中,如果事务T1最后更新A然后在S2中,则最终写入操作也应该由T1完成。
以上调度视图相等,因为S1中的最终写入操作由T3完成,而在S2中,最终写入操作也由T3完成。
示例:
有3个事务,可能的调度总数,如下所示:
= 3! = 6 S1 = <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