• 1. spanner 第一节介绍spanner的来龙去脉,接下来的三节分别介绍spanner的三个特点。 一、为什么要spanner 二、全球负载均衡 三、半关系数据模型 四、分布式事务
  • 2. 一、为什么要Spanner 传统的 RDBMS(例如MySQL)采用关系模型,有丰富的功能,支持SQL查询语句。而NoSQL数据库多是在key-value存储之上增加有限的功能,如 列索引、范围查询等,但具有良好的可扩展性。Spanner继承了Megastore的设计,数据模型介于RDBMS和NoSQL之间,提供树形、层次化 的数据库schema,一方面支持类SQL的查询语言,提供表连接等关系数据库的特性,功能上类似于RDBMS;另一方面整个数据库中的所有记录都存储在 同一个key-value大表中,实现上类似于BigTable,具有NoSQL系统的可扩展性。
  • 3. 一、为什么要SpannerBigtable和Megastore的特点 BigTable: 键值存储 支持single-row-transactions 快 Megastrore: 支持半关系数据模型 同步复制 慢 Spanner的特点 全球自动化负载均衡 半关系数据模型 持分布式事务
  • 4. 一、为什么要SpannerSpanner的应用 spanner在2011年作为广告后台F1的重新实现的一部分,代替mysql。Mysql的数据分片机制,会把每个客户和所有相关的数据分配给一个固定的分区。这种布局方式,可以支持针对单个客户的索引构建和复杂查询处理,但是,需要了解一些商业知识来设计分区。规模扩大,对数据进行重新分区代价很大(最近一次分区花费了两年)。采用spanner,不用手工分区,其次,spanner提供同步复制和自动失败恢复,而mysql的master-slave机制,很难进行失败恢复,会有数据丢失和当机的风险。
  • 5. 二、 全球负载均衡universe:一个spanner的部署称为一个universe。 zone:zone是管理部署的基本单元。 zonemaster:一个zone包含一个zonemaster。 spanserver:接受zonemaster分配的数据,向客户端提供数据。 location proxy:为客户端定位可以为提供数据的spanserver。 Univer master:只有一个,shi 一个控制台,显示关于zone的各种状态信息。 placement drive:周期性地与spanserver进行交互,进行副本迁移负载均衡。
  • 6. 三、半关系数据模型一个应用汇在一个universe中创建一个或者多个数据库。每个数据库可以包含无限数量的模式化的表。每个表都和关系数据库表类似,具备行、列和版本值。 数据模型不是纯粹关系型的,它的行必须有名称。每个表都需要有包含一个或多个主键列的排序集合。主键形成了一个行的名称,每个表都定义了从主键到非主键列的映射。当一个行存在时,必须要求已经给行的一些键定义了一些值(即使是NULL)。因为这可以让应用通过选择来控制数据的局部性。
  • 7. 三、半关系数据模型 以下是使用spanner的扩展SQL执行创建的一张表。其中users是一张父亲表,albums一张子表。
  • 8. 三、半关系数据模型directory: dictionary是数据复制和placement配置的基本单位,比如某个dictionary要分布在亚洲和美洲,共4份拷贝。 spanner中负载均衡的最小单位也是dictionary。
  • 9. 三、半关系数据模型BigTable的数据模型与spanner的比较: BigTable: -> cell content Spanner: -> row content 区别: 列是Bigtable对数据的定位的一个维度,而spanner强化行的概念不再突出列。 时间戳在BigTable里不具备控制并发的作用,而在spanner里则有这个作用。
  • 10. 四、分布式事务
  • 11. 参考资料http://www.cnblogs.com/raymondshiquan/articles/2697956.html Spanner的前世今生,此文将bigtable与spanner进行对比,以发展的目光,从原因上探讨了spanner对各种特点的支持。