关于“数据库系统概念 - 第 15 章 并发控制 - 15.5 基于有效性检查的协议”的疑问

2020-06-26 09:31:43 +08:00
 JasonLaw

在“数据库系统概念 - 第 15 章 并发控制 - 15.5 基于有效性检查的协议”中,有这么一段话:

事务 Ti 的有效性测试要求任何满足 TS(Tk)<TS(Ti)的事务 Tk 必须满足下面两条件之一:

  1. Finish(Tk) < Start(Ti)。因为 Tk 在 Ti 开始之前完成其执行,所以可串行性次序得到了保证。
  2. Tk 所写的数据项集与 Ti 所读数据项集不相交,并且 Tk 的写阶段在 Ti 开始其有效性检查阶段之前完成( Start(Ti) < Finish(Tk) < Validation(Ti))。这个条件保证 Tk 与 Ti 的写不重叠。因为 Tk 的写不影响 Ti 的读,又因为 Ti 不可能影响 Tk 的读,从而保证了可串行性次序。

我的疑问是:关于第 2 点,因为已经给出了“TS(Tk)<TS(Ti)”这个条件,所以一定会满足“TS(Tk)<TS(Ti)<Finish(Ti)”即“Validation(Tk)<Finish(Ti)”,也就是 Ti 的写一定是发生在 Tk 的读之后,这个条件就能够证明“Ti 不可能影响 Tk 的读”了。为什么还需要“Tk 的写阶段在 Ti 开始其有效性检查阶段之前完成( Start(Ti) < Finish(Tk) < Validation(Ti))”呢?不是“Tk 所写的数据项集与 Ti 所读数据项集不相交”就足够了吗?

1430 次点击
所在节点    数据库
8 条回复
aijam
2020-06-26 13:04:17 +08:00
第 2 点其实就是说两个事务如果运行时间有重合的时候怎么办。
你看看第七版原版说得是不是合理。ppt 第 50 页: https://www.db-book.com/db7/slides-dir/PDF-dir/ch18.pdf
(你会发现这书说得颠三倒四,ppt 和第 6 版说得好像是同一件事情,但是语序换了一下可以让读者理解成完全不同的事情。)
JasonLaw
2020-06-26 13:18:07 +08:00
@aijam 其实两个版本说的是一样的,只不过事务的名称变了而已。我不明白的是为什么还需要“Tk 的写阶段在 Ti 开始其有效性检查阶段之前完成( Start(Ti) < Finish(Tk) < Validation(Ti))”。
aijam
2020-06-26 13:25:20 +08:00
如果 Tk 还没有写完,Ti 的 validation 无法判断“Tk 所写的数据项集与 Ti 所读数据项集不相交”。
JasonLaw
2020-06-26 13:38:34 +08:00
@aijam 你说得对,那么说,不是应该将“ Tk 所写的数据项集与 Ti 所读数据项集不相交,并且 Tk 的写阶段在 Ti 开始其有效性检查阶段之前完成( Start(Ti) < Finish(Tk) < Validation(Ti))”替换成“ Tk 的写阶段在 Ti 开始其有效性检查阶段之前完成( Start(Ti) < Finish(Tk) < Validation(Ti)),并且 Tk 所写的数据项集与 Ti 所读数据项集不相交”吗?
aijam
2020-06-26 13:54:32 +08:00
所以我说这书语序有问题,ppt 就是你说的语序。
JasonLaw
2020-06-26 14:02:04 +08:00
@aijam 😂明白了,谢谢🙏。不过很奇怪,这个错误没有在 https://www.db-book.com/db6/errata-dir/errata-part4.pdf 列出。
aijam
2020-06-26 14:10:10 +08:00
也说不上是错误,更多是自然语言的局限性。如果从逻辑学来看,and 满足交换律,A and B = B and A ;从计算角度看,A and B 是先判断 A 在判断 B 。如果不比较几个版本,你也看不出作者到底想说什么语义。
JasonLaw
2020-06-26 14:18:21 +08:00
我觉得它们之间还是存在依赖性的,只有满足“Tk 的写阶段在 Ti 开始其有效性检查阶段之前完成”,才能进行“Tk 所写的数据项集与 Ti 所读数据项集是否相交”的判断。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/684807

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX