暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
Google-Bigtable中文版_1.0.pdf
406
25页
27次
2022-04-24
免费下载
Google Bigtable 中文版 1.0
作者/编著者:阎伟 邮件: andy.yanwei@163.com 博客: http://andyblog.sinaapp.com 微博:http://weibo.com/2152410864 1/25
Google Bigtable
1
1 摘要
Bigtable 是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服
务器上的 PB 级的数据。
Google 的很多项目使 Bigtable 存储数据,包 Web 索引、Google EarthGoogle Finance。这些应用
Bigtable 提出的要求差异非常大,无论是在数据量上(从 URL 到网页到卫星图像)还是在响应速度上(从后
端的批量处理到实时数据服务)尽管应用需求差异很大,但是,针对 Google 的这些产品,Bigtable 还是成功
的提供了一个灵活的、高性能的解决方案。
本论文描述了 Bigtable 提供的简单的数据模型利用这个模型用户可以动态的控制数据的分布和格式。
我们还将描述 Bigtable 的设计和实现
2 介绍
在过去两年半时间里,我们设计、实现并部署了一个分布式的结构化数据存储系统 Google,我们
称之为 BigtableBigtable 的设计目的是可靠的处 PB 级别的数据,并且能够部署到上千台机器上Bigtable
已经实现了下面的几个目标:适用性广泛、可扩展、高性能和高可用性
Bigtable 已经在超过 60 Google 的产品和项目上得到了应用,包 Google AnalyticsGoogle Finance
OrkutPersonalized SearchWritely Google Earth。这些产品对 Bigtable 提出了迥异的需求,有的需要高吞
吐量的批处理,有的则需要及时响应,快速返回数据给最终用户。它们使用的 Bigtable 集群的配置也有很
的差异,有的集群只有几台服务器,而有的则需要上千台服务器、存储几百 TB 的数据。
在很多方面,Bigtable 和数据库很类似:它使用了很多数据库的实现策略。并行数据库【14】和内存数
据库13已经具备可扩展性和高性能但是 Bigtable 提供了一个和这些系统完全不同的接口Bigtable 不支
持完整的关系数据模型;与之相反,Bigtable 为客户提供了简单的数据模型,利用这个模型,客户可以动态控
制数据的分布和格式
2
,用户也可以自己推测
3
底层存储数据的位置相关性
4
。数据的下标是行和列的名字,名
字可以是任意的字符串Bigtable 将存储的数据都视为字符串,但是 Bigtable 本身不去解析这些字符串客户
1
译者 alex,原文地址 http://blademaster.ixiezi.com/
2
也就是对 BigTable 而言,数据是没有格式的。用数据库领域的术语说,就是数据没有 Schema,用户自己去定义 Schema
3
英文为 reason about
4
位置相关性可以这样理解,比如树状结构,具有相同前缀的数据的存放位置接近。在读取的时候,可以把这些数据一次读取
出来
Google Bigtable 中文版 1.0
作者/编著者:阎伟 邮件: andy.yanwei@163.com 博客: http://andyblog.sinaapp.com 微博:http://weibo.com/2152410864 2/25
程序通常会在把各种结构化或者半结构化的数据串行化到这些字符串里。通过仔细选择数据的模式,客户可
以控制数据的位置相关性。最后,可以通过 BigTable 的模式参数来控制数据是存放在内存中、还是硬盘上。
3 节描述关于数据模型更多细节方面的东西;
4 节概要介绍了客户 API
5 节简要介绍 BigTable 底层使用的 Google 的基础框架;
6 节描述了 BigTable 实现的关键部分;
7 节描述了我们为了提 BigTable 的性能采用的一些精细的调优方法
8 节提供了 BigTable 的性能数据;
9 节讲述了几 Google 内部使用 BigTable 的例子;
10 节是我们在设计和后期支持过程中得到一些经验和教训;
最后,在第 11 节列出我们的相关研究工作, 12 节是我们的结论。
3 数据模型
Bigtable 是一个稀疏的、分布式的、持久化存储的多维度排序 Map
5
Map 的索引是行关键字、列关键字
以及时间戳;Map 中的每个 value 都是一个未经解析 byte 数组。
(row:string, column:string,time:int64)->string
我们在仔细分析了一个类 Bigtable 的系统的种种潜在用途之后,决定使用这个数据模型。我们先举
具体的例子,这个例子促使我们做了很多设计决策;假设我们想要存储海量的网页及相关信息,这些数据可
以用于很多不同的项目,我们姑且称这个特殊的表为 Webtable。在 Webtable 里,我们使用 URL 作为行关键
字,使用网页的某些属性作为列名,页的内容存在contents:列中,并用获取该网页的时间戳作为标识
6
如图一所示。
图表 1 个存储 Web 网页的例子的表的片断
5
Map key value 组成,后面我们直接使用 key value,不再另外翻译了
6
即按照获取时间不同,存储了多个版本的网页数据
Google Bigtable 中文版 1.0
作者/编著者:阎伟 邮件: andy.yanwei@163.com 博客: http://andyblog.sinaapp.com 微博:http://weibo.com/2152410864 3/25
行名是一个反 URLcontents 列族存放的是网页的内容,anchor 列族存放引用该网页的锚链接文本
7
CNN Sports Illustrator MY-look anchor:cnnsi.com”和
anchhor:my.look.ca的列。每个锚链接只有一个版本
8
;而 contents 列则有三个版本,分别由时间戳 t3t5
t6 标识。
3.1
表中的行关键字可以是任意的字符串(目前支持最大 64KB 的字符串,但是对大多数用户,10-100 个字
节就足够了)。对同一个行关键字的读或者写操作都是原子的(不管读或者写这一行里多少个不同列),这个
设计决策能够使用户很容易的理解程序在对同一个行进行并发更新操作时的行为。
Bigtable 通过行关键字的字典顺序来组织数据表中的每个行都可以动态分区每个分区叫做一个”Tablet”,
Tablet 是数据分布和负载均衡调整的最小单位。这样做的结果是,当操作只读取行中很少几列的数据时效率很
高,通常只需要很少几次机器间的通信即可完成。用户可以通过选择合适的行关键字,在数据访问时有效利
用数据的位置相关性,从而更好的利用这个特性。举例来说, Webtable 里,通过反转 URL 中主机名的
式,可以把同一个域名下的网页聚集起来组织成连续的行。体来说,我们可以把 maps.google.com/index.html
的数据存放在关键字 com.google.maps/index.html 下。把相同的域中的网页存储在连续的区域可以让基于主
和域名的分析更加有效。
3.2 列族
列关键字组成的集合叫做“列族“,列族是访问控制的基本单位。存放在同一列族下的所有数据通常都
属于同一个类型(我们可以把同一个列族下的数据压缩在一起)列族在使用之前必须先创建,然后才能在列
族中任何的列关键字下存放数据;列族创建后,其中的任何一个列关键字下都可以存放数据。根据我们的设
计意图,一张表中的列族不能太(最多几百个)并且列族在运行期间很少改变。与之相对应的,一张表可
以有无限多个列
列关键字的命名语法如下列族:限定词。 列族的名字必须是可打印的字符串,而限定词的名字可以是
任意的字符串比如,Webtable 有个列族 languagelanguage 列族用来存放撰写网页的语言我们在 language
列族中只使用一个列关键字,用来存放每个网页的语言标识 IDWebtable 中另一个有用的列族 anchor;这
个列族的每一个列关键字代表一个锚链接,如图一所示。Anchor 列族的限定词是引用该网页的站点名Anchor
列族每列的数据项存放的是链接文本
7
HTML Anchor
8
注意时间戳标识了列的版本,t9 t8 分别标识了两个锚链接的版本
of 25
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。