Bigtable
外观
Developer(s) | |
---|---|
Initial release | 2005年 |
Repository |
|
Engine | |
Operating system | 跨平台 |
Type | NoSQL数据库 |
License | 专有 |
Website | https://research.google/pubs/pub27898/ |
Bigtable是Google开发的专有分布式存储系统,用于管理结构化数据,旨在扩展到PB级数据量。它结合了分布式系统和非关系型数据库的特点,为Google的许多核心服务提供支持。
概述[编辑 | 编辑源代码]
Bigtable是一个高性能的、可扩展的键值存储系统,具有以下关键特性:
- 分布式架构:数据自动分片并分布在多个服务器上
- 列式存储:数据按列族组织,支持高效查询
- 时间维度:每个数据单元都有多个时间戳版本
- 高可用性:通过数据复制实现容错
- 强一致性:提供强一致性的读写语义
系统架构[编辑 | 编辑源代码]
Bigtable采用三层架构设计:
客户端库[编辑 | 编辑源代码]
提供应用程序接口,处理与服务器的通信
主服务器(Master Server)[编辑 | 编辑源代码]
负责:
- 分配Tablet(数据分片)到Tablet服务器
- 检测Tablet服务器的添加和删除
- 负载均衡
- 处理模式变更(如表创建)
Tablet服务器[编辑 | 编辑源代码]
负责:
- 处理对Tablet的读写请求
- 分割过大的Tablet
依赖系统[编辑 | 编辑源代码]
Bigtable依赖于:
- Google文件系统(GFS):用于持久化存储数据
- Chubby:分布式锁服务,用于主服务器选举和引导
数据模型[编辑 | 编辑源代码]
Bigtable的数据模型可以表示为: 解析失败 (语法错误): {\displaystyle (row:string, column:string, time:int64) → string}
主要概念包括:
- 行键(Row Key):任意字符串,按字典序排列
- 列族(Column Family):列的集合,存储和访问控制的基本单位
- 时间戳(Timestamp):64位整数,用于版本控制
实现细节[编辑 | 编辑源代码]
存储结构[编辑 | 编辑源代码]
Bigtable使用SSTable(Sorted String Table)格式存储数据,具有以下特点:
- 不可变的有序键值映射
- 支持高效的范围查询
- 定期合并以减少文件数量
压缩[编辑 | 编辑源代码]
Bigtable采用多级压缩策略:
- Minor Compaction:将内存中的MemTable写入GFS
- Merging Compaction:合并多个SSTable
- Major Compaction:完全重写所有SSTable
应用案例[编辑 | 编辑源代码]
Bigtable被用于多个Google核心服务:
- Google搜索:存储网页索引
- Google地图:存储地理数据
- Google Analytics:存储用户分析数据
- Gmail:存储部分用户数据
与HBase的关系[编辑 | 编辑源代码]
HBase是Bigtable的开源实现,具有类似的架构和数据模型,但运行在Hadoop生态系统上。主要差异包括:
性能特点[编辑 | 编辑源代码]
Bigtable的设计使其特别适合:
- 高吞吐量的批处理作业
- 低延迟的数据访问
- 大规模数据存储(PB级以上)
- 需要灵活模式的应用