【发布时间】:2019-07-18 18:57:34
【问题描述】:
我正在学习数据库中的 OCC,前向 OCC 算法需要一个事务来验证所有并行运行但仍处于读取阶段的事务。我很困惑为什么它可以确保提交顺序保持序列化(COCSR,这意味着等效的序列化顺序与提交顺序相同)。
其实我可以举个这样的反例:
tx1: |--r(x)---|--validation--|------w(y)----|
tx2: |----r(z)----------r(y)----------|
tx1 的验证将通过,因为在其验证阶段它看不到 tx2 的 r(y)。 tx2 是只读事务,因此不需要验证阶段。 (算法出自《交易信息系统》一书)
但是,tx1 在tx2 之前提交,但tx2 看不到tx1 写入的值。这与COCSR的定义相矛盾,为什么?
【问题讨论】:
标签: database concurrency optimistic-concurrency