【发布时间】:2021-02-25 02:51:07
【问题描述】:
我有以下question:
read(T1, x)
read(T2, x)
write(T1, x)
write(T2, x)
commit(T1)
commit(T2)
说明调度是否可冲突序列化、可恢复并避免级联中止?
我这样处理问题:
----------------------
| T1 | T2 |
----------------------
| read(x) | |
----------------------
| | read(x) |
----------------------
| write(x)| |
----------------------
| | write(x) |
----------------------
| commit | |
----------------------
| | commit |
----------------------
我想,由于优先图中没有循环(非循环),因此它是可冲突序列化的。还可以通过交换将事务T1 转换为事务T2:
----------------------
| T1 | T2 |
----------------------
| read(x) | |
----------------------
| write(x)| |
----------------------
| commit | |
----------------------
| | read(x) |
----------------------
| | write(x) |
----------------------
| | commit |
----------------------
-
可以恢复吗?我认为是的,因为
T1在写入后提交,T2读取、写入和提交。 -
它是无级联的吗?我认为没有,因为
T1和T2在写完之后没有提交。 -
是否避免级联中止?我认为是的,因为它是可恢复的。
但是,答案是:
-
不冲突可序列化
-
可恢复
-
避免级联中止
现在,为什么这个冲突是严重的?
问候
【问题讨论】:
标签: database conflict-serializability