首页 > 解决方案 > 前向乐观并发控制的正确性

问题描述

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

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

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

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

但是,tx1之前提交tx2tx2看不到tx1写入的值。这与 COCSR 的定义相矛盾,为什么?

标签: databaseconcurrencyoptimistic-concurrency

解决方案


验证写入阶段是一个关键部分。当一个线程处于 val-write 阶段时,没有其他线程可以进行任何读/写操作。

tx1: |--r(x)---(--验证---w(y)-)----|

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


推荐阅读