绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Linearizability, Serializability and Strict Serializability
2020-05-15 17:29:59
这几个概念比较容易混淆,原因是Serializability是数据库领域的概念,而Linearizability是分布式系统,并发编程领域的东西,在这个分布式SQL时代,自然Linearizability和Serializability会经常一起出现。

Serializability: 数据库领域的ACID中的I。 ANSI SQL isolation有四种隔离级别,由弱到强分别是Read Uncommitted,Read Committed(RC),Repeatable Read(RR)和Serializable。Serializable的含义是:对并发事务包含的操作进行调度后的结果和某种把这些事务一个接一个的执行之后的结果一样。简单的一种调度实现就是真的把所有的事务进行排队,一个个的执行,显然这满足Serializability,问题就是性能。可以看出Serializability是与数据库事务相关的一个概念,一个事务包含多个读,写操作,这些操作由涉及到多个数据对象。

Linearizability: 针对单个操作,单个数据对象而说的。属于CAP中C这个范畴。一个数据被更新后,能够立马被后续的读操作读到。

Strict Serializability: 同时满足Serializability和Linearizability。

举个简单的例子:

两个事务T1,T2,T1先开始,更新数据对象o,T1提交。接着T2开始,读数据对象o,提交。以下两种调度:

1. T1,T2,满足Serializability,也满足Linearizability。


2. T2,T1,满足Serializability,不满足Linearizability,因为T1之前更新的数据T2读不到。

Spanner基于原子钟实现了Linearizability,原子钟精度误差大概7ms,CockroachDB没有高精度原子钟,而是通过NTP同步时钟,机器之间时钟偏差一般能控制到250ms以内,但是也不,这受到网络延时,系统load等因素的影响。如果采用和Spanner一样的方法实现Linearizability,显然性能太差,官方也不鼓励使用。因此,默认情况,CockroachDB提供的只是Serializability(前提依然是时钟偏差控制在一个范围内,可配置),不提供Linearizability,进而不提供Strict Serializability。TiDB和Percolator一样,通过timestamp oracle提供时钟源,同样实现了Linearizability

分享好友

分享这个小栈给你的朋友们,一起进步吧。

分布式数据库和存储
创建时间:2020-05-15 17:19:15
专注系统,基础架构,分布式系统
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 吴镝
    栈主

小栈成员

查看更多
  • at_1
  • chenglinjava0501
  • ?
  • sunbjt
戳我,来吐槽~