严格的时间表总是可序列化的吗?

时间:2016-11-29 06:51:03

标签: database concurrency

在DBMS中,严格的计划是否始终可序列化?

如果答案是否定的,那么请提供一个严格的时间表示例,该时间表不可序列化。

2 个答案:

答案 0 :(得分:3)

(对于以下内容,我假设冲突可序列化。)

不,严格的时间表并不总是可序列化的。以下调度是严格的(在提交之前不读取或覆盖数据项),但不可序列化(有两个冲突对:r_1[x] 和 w_2[x] & w_2[x] 和 w_1[x],但是它们的顺序不同)。下标1的操作属于事务T_1,下标2的操作属于事务T_2。

r_1[x] w_2[x] c_2 w_1[x] c_1

与上面给出的答案相反,可序列化的时间表不一定是严格的。请参见以下示例:

w_1[x] w_2[x] c_2 r_1[y] c_1

事务 T_2 在提交 T_1 之前覆盖了 T_1 的 w_1[x]。尽管如此,该时间表(冲突)等效于串行时间表 T_1 T_2。

答案 1 :(得分:2)

每个可序列化的时间表都是严格的。 但是每个严格的时间表都不是可序列化的。

Schedules heirarchy

如果计划的结果等于其连续执行的交易结果,即没有交错交易,则计划是一个可序列化的计划。

然而,严格的时间表是指某个其他事务T2无法读取或写入T1写入的数据的时间表,除非它已被提交。

例如,Strict schedule which is not serializable

换句话说,严格的时间表T2可以读取T1正在读取的数据,但是一旦T1写入数据,从那个时间到它提交的时间,T2就无法读取或写入数据。