文章目录
一、诞生背景
BigTable设计的动机与目标
- 动机
需要存储的数据种类繁多、类型多样,例如URL.图片、文字、视频、html文件、用户设置数据等;
需要处理海量的服务请求;
商用数据库无法满足Google的需求,底层系统技术的掌控便于系统维护和升级; - 目标
广泛的适用性:满足Google的系列产品的需求;
很强的可扩展性:横向扩展和纵向扩展;
高可用性:确保系统24X7可用;
简单:底层系统简单减少出错概率,为上层应用开发提供便利;
二、 BigTable的数据模型
- 分布式多维映射表结构
- 表中数据通过行关键字(Rowkey) 、列关键字(Columnkey)以及时间戳进行索引,所有数据以字符串形式存储,由用户解析数据
- 存储逻辑表示为(row:string,column:string. item:int64) -> string
例:网页www.cnn.com的数据片段
行名称是倒排的URL;
便于同一地址城的网页被存储在表中连续的位置;
便于数据压缩,大幅提高压缩率;
contents列族包含了网页内容;
anchor列族包含了任何引用这个页面的anchor文本;
CNN的主页被Sports Illustrated和MY-look主页同时引用,因此,行包含了名称为”anchor:cnnsi.com"和”anchor:my.look.ca" 的列。
每个anchor单元格都只一个版本,contents列有三个版本,分别对应于时间戳t3,t5和t6。
三、BigTable的数据模型-Rows
- BigTable的row key是任意的字符串,大小不超过64KB
- 对于每行数据的读写操作都是原子的(atomic) ,不管这个行中所包含的列族数量是多少。
- BigTable中的数据按照rowkey的字典顺序排序。
- .单个大规模的大表不利于数据的处理与分析,BigTable将一个表划分成多个子表(Tablet) ,是负载均衡和数据分发的基本单位。
四、BigTable的数据模型-Column Families
- BigTable将column key组织成列族(column family),是基本的访问控制单元,每个列族的数据属于同一个类型,同列族数据压缩存
- 在把数据存放到这个列家族的某个column key下之前,必须首先创建这个列族,创建后,可以使用column key
- 表当中所包含的列族 的数量尽可能少(至多几百个列族),在操作过程 当中,列族很少发生变化;一个表可以包含无限数量的列。
- column key命名语法: family:qualifier
例: anchor:cnnsi.com - 访问控制以及磁盘、内存审计在column family级别完成
五、BigTable的数据模型-timestamps
- 在BigTable中,每个单元都包含相同数据的多个版本,这些版本采用时间戳进行索引。
- 时间戳是64位整数,代表真实时间,以微秒来计算。客户应用也可以直接分配时间戳。
- 需要避免冲突的应用必须生成唯一的时间戳。
- 一个单元的不同版本根据时间戳降序顺序存储,最新的版本可以被最先读取。
- 为了减轻版本数据的管理负担,BigTable支持用户设定保存单元中数据的最近n个版本,或者只保存足够新版本(比如只保存最近7天内的数据版本)
六、Bigtable体系结构
BigTable基于Google的的三个云计算组件
1)GFS: Google File System
➢基于廉价的商用计算机的大型分布式文件系统
2)Chubby
➢基于松耦合分布式系统的锁服务
➢存储元数据的存储系统
➢名字服务
3)WorkQueue
➢分布式任务调度器,用于处理分布式系统队列分组与调度
➢未公开
Chuby会在下一张详细介绍。