能否在仅支持Serializability不提供Linearizability的数据库实现Optimistic Offline Lock?
关于乐观离线锁与线性一致性的困惑
我正在研究乐观离线锁模式,查阅资料后发现:多数资料指出使用支持可串行化隔离(部分资料认为可重复读级别已足够)的关系型数据库,即可无并发问题地实现该模式,并未提及需要事务具备线性一致性。比如PostgreSQL就不提供线性一致性,相关资料提到:
采用快照隔离/MVCC的数据库会刻意设计为非线性一致性,因为强制线性一致性会降低数据库的并发能力。例如PostgreSQL的SSI提供可串行化但不提供线性一致性,Oracle则两者都不具备。并非标有“ACID”的数据库就符合CAP定理定义的一致性。
但我的困惑在于:乐观离线锁本质上是比较并交换/更新操作,那它是不是也需要线性一致性?相关资料指出:
由于比较并交换操作(或看起来)是瞬时发生的,若在操作进行中有其他进程更新了目标位置,比较并交换操作将确保失败。
参考资料
- 《乐观离线锁模式》(Martin Fowler)
- 《强一致性模型》(Aphyr)
- 《请停止称数据库为CP或AP》(Martin Kleppmann)
- 《线性一致性维基百科条目》
内容的提问来源于stack exchange,提问作者S Lover
相关产品推荐
相关产品推荐

