V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JasonLaw
V2EX  ›  数据库

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

  •  
  •   JasonLaw · 2020-06-26 09:31:43 +08:00 · 1342 次点击
    这是一个创建于 1390 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在“数据库系统概念 - 第 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 所读数据项集不相交”就足够了吗?

    8 条回复    2020-06-26 14:18:21 +08:00
    aijam
        1
    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
        2
    JasonLaw  
    OP
       2020-06-26 13:18:07 +08:00 via iPhone
    @aijam 其实两个版本说的是一样的,只不过事务的名称变了而已。我不明白的是为什么还需要“Tk 的写阶段在 Ti 开始其有效性检查阶段之前完成( Start(Ti) < Finish(Tk) < Validation(Ti))”。
    aijam
        3
    aijam  
       2020-06-26 13:25:20 +08:00
    如果 Tk 还没有写完,Ti 的 validation 无法判断“Tk 所写的数据项集与 Ti 所读数据项集不相交”。
    JasonLaw
        4
    JasonLaw  
    OP
       2020-06-26 13:38:34 +08:00 via iPhone
    @aijam 你说得对,那么说,不是应该将“ Tk 所写的数据项集与 Ti 所读数据项集不相交,并且 Tk 的写阶段在 Ti 开始其有效性检查阶段之前完成( Start(Ti) < Finish(Tk) < Validation(Ti))”替换成“ Tk 的写阶段在 Ti 开始其有效性检查阶段之前完成( Start(Ti) < Finish(Tk) < Validation(Ti)),并且 Tk 所写的数据项集与 Ti 所读数据项集不相交”吗?
    aijam
        5
    aijam  
       2020-06-26 13:54:32 +08:00
    所以我说这书语序有问题,ppt 就是你说的语序。
    JasonLaw
        6
    JasonLaw  
    OP
       2020-06-26 14:02:04 +08:00
    @aijam 😂明白了,谢谢🙏。不过很奇怪,这个错误没有在 https://www.db-book.com/db6/errata-dir/errata-part4.pdf 列出。
    aijam
        7
    aijam  
       2020-06-26 14:10:10 +08:00
    也说不上是错误,更多是自然语言的局限性。如果从逻辑学来看,and 满足交换律,A and B = B and A ;从计算角度看,A and B 是先判断 A 在判断 B 。如果不比较几个版本,你也看不出作者到底想说什么语义。
    JasonLaw
        8
    JasonLaw  
    OP
       2020-06-26 14:18:21 +08:00
    我觉得它们之间还是存在依赖性的,只有满足“Tk 的写阶段在 Ti 开始其有效性检查阶段之前完成”,才能进行“Tk 所写的数据项集与 Ti 所读数据项集是否相交”的判断。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5405 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:07 · PVG 15:07 · LAX 00:07 · JFK 03:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.