Linearizability versus Serializability
Linearizability 和 Serializability 是在数据库和分布式系统中重要的两个概念,而且比较容易混淆,这篇文章试着对两个概念的不同进行简单、简短的解释。
Linearizability: single-operation, single-object, real-time order
Linearizability:单操作,单对象,实时顺序。
Linearizability 是对单个对象进行单次操作的一种保证。它提供了对于同一个对象的一系列 read/write 操作都是按照 real time(例如 wall-clock)排序的。
通俗来说,Linearizability 下,写入操作应该是瞬时的,一个对象的写操作一旦完成,能立即被后续的读操作看到,即读一定是读到这个对象的最新的值。
Linearizability 是 “atomic consistency” 的同义词,同时也是 CAP 种的 C,“consistency”。
并且 Linearizability 是可组合的,如果系统中每个对象的操作都是 linearizable,则系统中所有操作是 linearizable。
Serializability: multi-operation, multi-object, arbitrary total order
Serializability:多个操作,多个对象,任意的顺序
Serializability 是对事务的一种保证。Serializability保证了多个事务(每个都包含了一组对于不同对象的读/写操作)的执行等同于一个顺序执行的效果。
Serializability 是 ACID 中的 I。如果每个事务都保证了 correctness(ACID 中的 C),则顺序执行的事务也保证了 correctness,因此serializability是保证事务正确的一个机制。
❗️Serializability 🆚 Linearizability:Serializability 没有对事务的执行顺序强加任何 real-time order 的约束,即不需要操作是按照真实时间严格排序的,只需要存在一个满足条件的顺序执行顺序即可,不需要每个事务都是严格的先后时间顺序。
Strict Serializability: Why don’t we have both?
Strict Serializability = Serializability + Linearizability 事务行为等同于某种序列执行,而序列顺序与 real time 相对应。
🌰 我们假设开始并提交 T1,写item x;然后稍后开始提交 T2,读 x。数据库如果按照 Strict Serializability,则会先 T1 后 T2,T2 会读到 x 的最新值,如果数据库按照 Serializability,则可能会先 T2 后 T1。
如 Herlihy and Wing 所说:Linearizability 可被视为 Strict Serializability 的一种特殊情况,在这种情况下,事务被限制为由应用于单一对象的单一操作组成。
Coordination costs and real-world deployments
Linearizability 或者 Serializability 在没有 coordination 的情况下都不可能达到。也就是说,我们在异步网络下,我们无法提供 Linearizability 或者 Serializability 的可用性(即 CAP "AP")。
正如上述理论所暗示的,实现这些特性需要大量昂贵的协调工作。因此,现实系统通常使用更便宜的实现模型,但往往更难理解。效率与可编程性之间的这种权衡,代表了一个迷人而又充满挑战的设计空间。
A note on terminology, and more reading
Linearizability 来源于分布式系统和并发编程,而 Serializability 则来源于数据库。如今这两者都在分布式系统和数据库中使用,也导致了术语上的冲突。
本文作者:Joey-Wang
本文链接:https://www.cnblogs.com/joey-wang/p/17652658.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步