读写冲突目的就是为了确保线性一致性不被破坏,和悲观乐观模式无关。根据线性一致性中的循序性,逻辑上发生的顺序不能违反物理上的先后顺序,例如T时刻发起的读操作一定能读取到T时刻之前的所有变更,因此读写冲突本质就是读操作必须要等待比自己早发生的写操作完成,然后再去读取,从而满足循序性。另一方面,事务的commit是一个过程,例如Txn0从T1时刻开始执行2PC中的commit阶段,确定的commit_ts为T2,在T3时刻commit完成(T1<T2<T3,不考虑Async Commit),那么假设读事务Txn1的start_ts位于T2~T3之间,那么根据循序性它必须要能够读取到Txn0写的数据(因为T2小于自己的start_ts),那么Txn1这时只能等或者backoff
1 个赞