乐观的离线锁:在没有线性化的情况下提供序列化的数据库中实现这一点? (即,DB 不提供严格的可序列化性)

问题描述 投票:0回答:0

我正在研究乐观的离线锁定模式。即,https://martinfowler.com/eaaCatalog/optimisticOfflineLock.html

我看到很多参考资料表明,使用提供 可序列化隔离(或者一些建议 可重复读取 就足够了)的 RDBMS 可以在没有并发问题的情况下实现这种模式。没有提到要求交易的线性化。例如,Postgres 不提供线性化: 参考资料:https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html

此外,具有快照隔离/MVCC 的数据库有意是不可线性化的,因为强制线性化会降低数据库可以提供的并发级别。例如,PostgreSQL 的 SSI 提供可串行化但不提供线性化,而 Oracle 两者都不提供。仅仅因为数据库被标记为“ACID”并不意味着它符合 CAP 定理的一致性定义。

所以我的困惑是,是否也需要线性化,因为乐观的离线锁基本上是一个比较和交换/更新
参考:https://en.wikipedia.org/wiki/Linearizability#Compare-and-swap

由于比较和交换是瞬时发生(或似乎发生)的,如果我们正在进行时另一个进程更新了位置,则比较和交换肯定会失败。

参考资料:

https://martinfowler.com/eaaCatalog/optimisticOfflineLock.html https://aphyr.com/posts/313-strong-consistency-models#serializable-consistency https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html https://en.wikipedia.org/wiki/Linearizability#Compare-and-swap

database distributed-computing distributed-system compare-and-swap optimistic-concurrency
© www.soinside.com 2019 - 2024. All rights reserved.