- 数据模型
Bigtable是一个分布式多维映射表,表中的数据是通过一个行关键字(Row Key)、一个列关键字(Column Key)以及一个时间戳(Time Stamp)进行索引的。Bigtable对存储在其中的数据不做任何解析,一律看做字符串,具体数据结构的实现需要用户自行处理。Bigtable的存储逻辑可以表示为:
(row:string,column:string,time:int64)->string
Bigtable数据的存储格式如图2-12所示。
- 行
Bigtable的行关键字可以是任意的字符串,但是大小不能超过64KB。Bigtable和传统的关系型数据库有很大不同,它不支持一般意义上的事务,但能保证对于行的读写操作具有原子性(Atomic)。表中数据库都是根据行关键字进行排序的,排序使用的是词典序。图2-12是Bigtable数据模型的一个典型实例,其中com.cnn.www就是一行关键字。不直接存储网页地址而将其倒排是Bigtable的一个巧妙设计。这样做至少会带来一下两个好处。
- 同一地址域的网页会被存储在表中的连续位置,有利于用户查找和分析。
- 倒排便于数据压缩,可以大幅提高压缩率。
单个的大表由于规模问题不利于数据处理,因此Bigtable将一个表分成了很多子表(Tablet),每个子表包含多个行。子表是Bigtable中数据划分和负载均衡的基本单位。有关子表的内容会在稍后详细讲解。
- 列
Bigtable并不是简单的存储所有的列关键字,而是将其组织成所谓的列族(Column Family),每个族中的数据都属于同一个类型,并且同族的数据会被压缩在一起保存。引入了列族的概念之后,列关键字就采用下述的语法规则来定义:
族名:限定词(family:qualifier)
族名必须有意义,限定词则可以任意选定。在图2-12中,内容(Contents)、锚点(Anchor,就是HTML中的链接)都是不同的族。而cnnsi.com和my.look.ca则是锚点族中不同的限定词。通过这种方式组织的数据结构清晰明了,含义也很清楚。族同时也是Bigtable中访问控制(Access Control)的基本单元,也就是说访问权限的设置是在族这一级别上进行的。
点击加载更多评论>>