深入理解Spanner事务

本文深入探讨了Google Spanner数据库的事务实现机制,包括其基于MVCC的数据模型、TrueTime时钟服务、软件架构及事务类型。分析了读写、只读及快照读事务的处理流程,以及为确保线性一致性和串行化隔离级别所采用的悲观锁和乐观锁结合策略。

转载请附本文链接:https://blog.csdn.net/maxlovezyy/article/details/103745151

最近读了论文Spanner,发现其事务的实现还是蛮有意思的,设计上有一些不是很显而易见的地方,这里记录一下,希望能对更多的人有所帮助。下面先介绍一下其实现事务的基本依托和组件,之后再详细分析一下其事务的实现。

引子

目前数据库的数据模型基本上都是MVCC的模型,读不需要上锁,基于快照即可,写的话也不需要in-place地更改,对IO来讲也是很友好的,具有很好的性能。另一方面,对于数据库的串行化技术来讲,主要有两种手段,一个是锁,一个是基于时间戳排序,时间戳可以和MVCC很好地结合。

Spanner也采用了MVCC的数据模型,通过锁和时间戳排序结合的方式来保证事务的ACID特性。另外,Spanner是一个全球化的数据库,这意味着它的时间戳不能像Percolator中提到的一个集中的时钟服务来提供了,其用到的是下节中介绍的TrueTime,这是一个类似于NTP的一套时钟保证机制,可以认为是一个能提供误差有界的、精度很高的物理时间的时钟机制。

TrueTime

Spanner通过原子钟和GPS授时结合,提供了上下误差在2ms以内的物理时钟服务,其API如下:

Method Returns
TT.now() TTinterval: [earliest, latest]
TT.after(t) true if t has definitely passed
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值