我在数据库中学习occ,面向前向的occ算法需要一个事务来验证所有并行运行的事务,但仍处于读取阶段。我不明白为什么它可以确保保持提交顺序的可序列化性(cocsr,这意味着等效的序列化顺序与提交顺序相同)。
实际上,我可以举一个反例:

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

tx1的验证将通过,因为在其验证阶段,它没有看到r(y)tx2tx2是只读事务,因此不需要验证阶段。(算法摘自《交易信息系统》一书)
但是,tx1tx2之前提交,但是tx2看不到tx1写入的值。这与cocsr的定义相矛盾,为什么?

最佳答案

验证写入阶段是一个关键部分。当一个线程处于val write阶段时,没有其他线程可以执行任何读/写操作。
TX1:--R(X)---(-验证---W(Y)--)|
TX2:----R(Z)------R(Y)-----|

09-30 20:36