我在一本教科书( Avi Silberschatz、Henry F. Korth和S. Sudarshan $6e$)第686页(数据库系统概念教科书)中遇到了以下几行:
Thomas的写规则允许计划不是冲突的可序列化的,但仍然是正确的。那些非冲突的可序列化计划满足视图可序列化计划的定义(参见示例框)。
我从上面的行中了解到,按照Thomas的写规则由时间戳协议生成的每个调度都是可序列化的视图。
现在让我们来看下面的小计划:$S: R_1(X),W_2(X),W_1(X)$。
这个调度$S$是允许在时间戳协议下,它遵循托马斯的写规则。
序列化顺序为$R_1(X),W_1(X).$
但我无法证明它是可序列化的视图。
实际上我认为它是非视图可序列化的,因为,
这里出什么问题了?请帮我拿这个。
发布于 2019-11-21 05:07:44
S的时间表如下:
T1 T2
---- -----
R(X)
W(X)
W(X)要想查看可序列化,W2(X)必须在R1(X)之前或W1(X)之后移动。然而,第一个会违反“初始读取”规则,而第二个会违反“最后写入”规则。
T2在T1之后启动,因此具有更高的时间戳。当T1写X的时候,它看到了T2's的时间戳。根据托马斯的写规则,T1的写是无效的,可以删除。然后,给定的时间表变成
T1 T2
---- -----
R(X)
W(X)现在所有的T2's动作都是在T1's之后发生的--时间表是连续的。
(您的问题中有相反的情况,删除W2(X)。我认为这是个错误。)
要显示计划是可串行化的,只需显示至少有一个等效的时间表是串行的。没有必要证明每一个可能的串行时间表都是可以实现的。我同意,由于读写依赖关系,T2、T1不能按原计划查看可串行化。但是,T1、T2在Thomas规则下是可序列化的。
发布于 2020-08-21 15:32:16
我不太清楚地问托马斯写规则是否“允许”查看可序列化的时间表。正确的问题应该是,“由thomas规则生成的计划”是否是可序列化的?“。这个规则说忽略T1's过时的写(X)在进度表S:R1(X),W2(X),W1(X)。它可以被忽略,因为没有其他事务会读取它,并且它不会以任何方式影响时间表。给出的调度S是不可串行化的(既不是视图也不是冲突),但是由thomas规则生成的结果调度S':R1(X),W2(X)是按T1->T2顺序可序列化的视图(在所有情况下都不能保证冲突可串行化)。
https://dba.stackexchange.com/questions/252771
复制相似问题