摘要
Bigtable 是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:
通常是分布在数千台普通服务器上的 PB 级的数据。Google 的很多项目使用
Bigtable 存储数据,包括 Web 索引、Google Earth、Google Finance。这些应
用对 Bigtable 提出的要求差异非常大,无论是在数据量上(从 URL 到网页到卫
星图像)还是在响应速度上(从后端的批量处理到 实时数据服务)。尽管应用
需求差异很大,但是,针对 Google 的这些产品,Bigtable 还是成功的提供了一
个灵活的、高性能的解决方案。本论文描述 了 Bigtable 提供的简单的数据模型,
利用这个模型,用户可以动态的控制数据的分布和格式;我们还将描述 Bigtable
的设计和实现。
1 介绍
在过去两年半时间里,我们设计、实现并部署了一个分布式的结构化数据存储系
统 — 在 Google,我们称之为 Bigtable。Bigtable 的设计目的是可靠的处理 PB
级别的数据,并且能够部署到上千台机器上。Bigtable 已 经实现了下面的几个
目标:适用性广泛、可扩展、高性能和高可用性。Bigtable 已经在超过 60 个 Google
的产品和项目上得到了应用,包括 Google Analytics、Google Finance、Orkut、
Personalized Search、Writely 和 Google Earth。这些产品对 Bigtable 提出了
迥异的需求,有的需要高吞吐量的批处理,有的则需要及时响应,快速返回数据
给最终用户。它们使用的 Bigtable 集群的配置也有很大的差异,有的集群只有
几台服务器,而有的则需要上千台服务器、存储几百 TB 的数据。
在很多方面,Bigtable 和数据库很类似:它使用了很多数据库的实现策略。并
行数据库【14】和内存数据库【13】已经具备可扩展性和高性能, 但是 Bigtable
提供了一个和这些系统完全不同的接口。Bigtable 不支持完整的关系数据模型;
与之相反,Bigtable 为客户提供了简单的数 据模型,利用这个模型,客户可以
动态控制数据的分布和格式(alex 注:也就是对 BigTable 而言,数据是没有格
式的,用数据库领域的术语说,就是数据没有 Schema,用户自己去定义 Schema),
用户也可以自己推测(alex 注:reason about)底层存储数据的位置相关性(alex
注:位置相关性可以这样理解,比如树状结构,具有相同前缀的数据的存放位置
接近。在读取的时候,可以把这些数据一次读取出来)。 数据的下标是行和列的
名字,名字可以是任意的字符串。Bigtable 将存储的数据都视为字符串,但是
Bigtable 本身不去解析这些字符串,客户程序 通常会在把各种结构化或者半结
构化的数据串行化到这些字符串里。通过仔细选择数据的模式,客户可以控制数
据的位置相关性。最后,可以通过 BigTable 的模式参数来控制数据是存放在内
存中、还是硬盘上。
第二节描述关于数据模型更多细节方面的东西;第三节概要介绍了客户端 API;
第四节简要介绍了 BigTable 底层使用的 Google 的基础框架; 第五节描述了
BigTable 实现的关键部分;第 6 节描述了我们为了提高 BigTable 的性能采用的
一些精细的调优方法;第 7 节提供了 BigTable 的性能数据;第 8 节讲述了几个
Google 内部使用 BigTable 的例子;第 9 节是我们在设计和后期支持过程中得到