共计 1869 个字符,预计需要花费 5 分钟才能阅读完成。
0. Abstract
Bigtable 是一个存储 pb 量级结构化数据的分布式存储系统。google 外部很多我的项目都在应用 Bigtable,包含 web indexing、Google Earth、Google Finance 等,这些利用在数据大小、提早要求等方面对 Bigtable 的要求各不相同。Bigtable 胜利的提供了一个灵便的、高性能的解决方案。本篇论文形容了 Bigtable 提供的数据模型,以及 Bigtable 的设计与实现。
1. Introduction
次要是一些概括性的内容,以及对前面各节次要内容的详情。
2. Data Model
Bigtable 是一个稠密的、分布式的、长久化的多维度有序 map。这个 map 被 row key、column key 和一个工夫戳索引,map 的每个 value 是未解析的字节数组,即:
(row:string, column:string, time:int64) -> string
row key 是任意的字符串(目前的下限是 64KB,对于大部分使用者而言 10-100 bytes 够了)。单个 row key 下的单次读或者写是原子的(即便是不同的 column),这样设计的起因是为了让客户分明并发更新雷同 row 时的零碎行为。
Bigtable 依照 row key 的字典序保留数据。表的 row range 动静分区,每个 row range 被称为 tablet,是散布和负载平衡的单位。因而,对 short row range 的读取很高效,个别仅须要和少部分机器进行通信。客户能够利用这个性质,通过抉择适合的 row keys 达到对数据拜访良好的局部性。
column keys 被组织为 column families,是管制的根本单位。保留在同一个 column family 的所有数据往往领有雷同的类型,一个表中反对较少的 column families(最多几百个),并且很少扭转。相同的,一个表能够领有的 column 没有下限(从设计上来说)。
一个 column key 的名字应用如下语法:family:qualifier。column family 的名字必须是可打印的,而 qualifiers 能够是任意字符串。
timestamps 是一个 64-bit 的整数。Bigtable 中能够保留一份数据的多个版本;这些版本通过 timestamps 索引。timestamps 能够由 Bigtable 赋值(real time),也能够由客户利用显式指定。须要防止抵触的利用须要本人产生惟一的 timestamps。不同版本的数据依照 timestamp 降序存储。
为了更轻松的治理多个版本的数据,Bigtable 反对两种垃圾回收策略(在单个 column-family 外部)。 基于工夫的和基于数量的,在此不赘述,见论文原文。
3. API
Bigtable 提供了创立和删除 table 以及 column families 的函数,也提供了扭转集群、table 和 column family 元数据的函数,比方访问控制权限。
Bigtable 反对单行事务,可用来执行原子的读 - 批改 - 写操作,但不反对跨行事。 本节其余局部略过,见原文。
4. Building Blocks
Bigtable 建设在 Google 其余的基础设施上,比方应用 GFS 存储日志和数据文件。Bigtable 也依赖于集群管理系统来调度工作、治理机器和资源、存储机器谬误、监控机器状态等。
Bigtable 的数据应用 Google SSTable 文件格式存储。一个 SSTable 提供了长久的、有序的不可变 kv map,并且 key 和 value 都是任意字符串。每个 SSTable 外部含有一系列 block(每个 block 个别是 64kb,当然这是可配置的)。SSTable 的最初存储有 block index,可用来定位 block。
Bigtable 依赖于一个高可用的、长久化的分布式锁服务 Chubby(应该是一个相似于 zk 的零碎,这里不赘述),Bigtable 应用它确保 master 的唯一性;存储数据的 bootstrap location(见 5.1);发现 tablet 服务和确定 tablet 服务 death(见 5.2);存储 Bigtable 的架构信息(每个表的 column family 信息);存储拜访权限列表。
5. Implementation
Bigtable 分为三个组件:一个 master 服务、多个 tablet 服务、和一个连贯客户端的 library。tablet 服务能够被动静增加以适应工作负载的变动。 接着简要介绍了 master 服务和 tablet 服务的工作,见原文。