7.3 Google Spanner
Google Spanner是Google的全球级分布式数据库(Globally-Distributed Database)。Spanner的扩展性达到了全球级,可以扩展到数百个数据中心,数百万台机器,上万亿行记录。更为重要的是,除了夸张的可扩展性之外,它还能通过同步复制和多版本控制来满足外部一致性,支持跨数据中心事务。
无论从学术研究还是工程实践的角度看,Spanner都是一个划时代的分布式存储系统。Spanner的成功说明了一点,分布式技术能够和数据库技术有机地结合起来,通过分布式技术实现高可扩展性,并呈现给使用者类似关系数据库的数据模型。
7.3.1 数据模型
Spanner的数据模型与6.2节中介绍的Megastore系统比较类似。
如图7-6所示,对于一个典型的相册应用,需要存储其用户和相册,可以用上面的两个SQL语句来创建表。Spanner的表是层次化的,最底层的表是目录表(Directorytable),其他表创建时,可以用INTERLEAVE IN PARENT来表示层次关系。Spanner中的目录相当于Megastore中的实体组,一个用户的信息(user_id,email)以及这个用户下的所有相片信息构成一个目录。实际存储时,Spanner会将同一个目录的数据存放到一起,只要目录不太大,同一个目录的每个副本都会分配到同一台机器。因此,针对同一个目录的读写事务大部分情况下都不会涉及跨机操作。
图 7-6 Spanner数据模型