从GoogleSpanner漫谈分布式存储与数据库技术.docx

从GoogleSpanner漫谈分布式存储与数据库技术.docx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
从Google Spanner漫谈分布式存储与数据库技术 文/曹伟   Spanner 的设计反映了 Google 多年来在分布式存储系统领域上经验的积累和沉淀,它采用了 Megastore 的数据模型,Chubby 的数据复制和一致性算法,而在数据的可扩展性上使用了 BigTable 中的技术。新颖之处在于,它使用高精度和可观测误差的本地时钟来判断分布式系统中事件的先后顺序。Spanner 代表了分布式数据库领域的新趋势——NewSQL。   Spanner 是 Google 最近公开的新一代分布式数据库,它既具有 NoSQL 系统的可扩展性,也具有关系数据库的功能。例如,它支持类似 SQL 的查询语言、支持表连接、支持事务(包括分布式事务)。Spanner 可以将一份数据复制到全球范围的多个数据中心,并保证数据的一致性。一套 Spanner 集群可以扩展到上百个数据中心、百万台服务器和上T条数据库记录的规模。目前,Google 广告业务的后台(F1)已从 MySQL 分库分表方案迁移到了 Spanner 上。   数据模型   传统的 RDBMS(例如 MySQL)采用关系模型,有丰富的功能,支持 SQL 查询语句。而 NoSQL 数据库多是在 key-value 存储之上增加有限的功能,如列索引、范围查询等,但具有良好的可扩展性。Spanner 继承了 Megastore 的设计,数据模型介于 RDBMS 和 NoSQL 之间,提供树形、层次化的数据库 schema,一方面支持类 SQL 的查询语言,提供表连接等关系数据库的特性,功能上类似于 RDBMS;另一方面整个数据库中的所有记录都存储在同一个 key-value 大表中,实现上类似于 BigTable,具有 NoSQL 系统的可扩展性。   在 Spanner 中,应用可以在一个数据库里创建多个表,同时需要指定这些表之间的层次关系。例如,图 1 中创建的两个表——用户表(Users)和相册表(Albums),并且指定用户表是相册表的父节点。父节点和子节点间存在着一对多的关系,用户表中的一条记录(一个用户)对应着相册表中的多条记录(多个相册)。此外,要求子节点的主键必须以父节点的主键作为前缀。例如,用户表的主键(用户 ID)就是相册表主键(用户 ID+ 相册 ID)的前缀。 图 1 schema 示例,表之间的层次关系,记录排序后交错的存储   显然所有表的主键都将根节点的主键作为前缀,Spanner 将根节点表中的一条记录,和以其主键作为前缀的其他表中的所有记录的集合称作一个 Directory。例如,一个用户的记录及该用户所有相册的记录组成了一个 Directory。Directory 是 Spanner 中对数据进行分区、 复制和迁移的基本单位,应用可以指定一个 Directory 有多少个副本,分别存放在哪些机房中,例如把用户的 Directory 存放在这个用户所在地区附近的几个机房中。   这样的数据模型具有以下好处。 一个 Directory 中所有记录的主键都具有相同前缀。在存储到底层 key-value 大表时,会被分配到相邻的位置。如果数据量不是非常大,会位于同一个节点上,这不仅提高了数据访问的局部性,也保证了在一个 Directory 中发生的事务都是单机的。 Directory 还实现了从细粒度上对数据进行分区。整个数据库被划分为百万个甚至更多个 Directory,每个 Directory 可以定义自己的复制策略。这种 Directory-based 的数据分区方式比 MySQL 分库分表时 Table-based 的粒度要细,而比 Yahoo!的 PNUTS 系统中 Row-based 的粒度要粗。 ?Directory 提供了高效的表连接运算方式。在一个 Directory 中,多张表上的记录按主键排序,交错(interleaved)地存储在一起,因此进行表连接运算时无需排序即可在表间直接进行归并。   复制和一致性   Spanner 使用 Paxos 协议在多个副本间同步 redo 日志,从而保证数据在多个副本上是一致的。Google 的工程师钟情于 Paxos 协议,Chubby、Megastore 和 Spanner 等一系列产品都是在 Paxos 协议的基础上实现一致性的。   Paxos 的基本协议很简单。协议中有三个角色:Proposer、Acceptor 和 Learner,Learner 和 Proposer 分别是读者和写者,Acceptor 相当于存储节点。整个协议描述的是,当系统中有多个 Proposer 和 Acceptor 时,每次 Proposer 写一个变量就会启动一轮决议过程(Paxos instanc

文档评论(0)

bodkd + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档