前向乐观并发控制的正确性

时间:2019-07-18 18:57:34

标签: database concurrency optimistic-concurrency

我正在数据库中学习OCC,前向OCC算法需要一个事务来验证所有并行运行但仍处于读取阶段的事务。我很困惑为什么它可以确保保留提交顺序的可序列化性(COCSR,这意味着等效的序列化顺序与提交顺序相同)。

实际上,我可以举一个这样的反例:

tx1: |--r(x)---|--validation--|------w(y)----|
tx2:          |----r(z)----------r(y)----------|

tx1的验证将通过,因为在其验证阶段它看不到r(y)的{​​{1}}。 tx2是只读事务,因此不需要验证阶段。 (该算法摘自《交易信息系统》一书)

但是,tx2tx1之前提交,但是tx2没有看到tx2写入的值。这与COCSR的定义相矛盾,为什么?

1 个答案:

答案 0 :(得分:1)

验证写入阶段是关键部分。当一个线程处于val-write阶段时,其他任何线程都不能执行任何读/写操作。

  

tx1:| --r(x)---(-validation --- w(y)-)---- |

     

tx2:| ---- r(z)------------------------------ r(y)- ----- |