layout: post
title: "云计算之分布式表格系统"
category: Reading Notes
tags: ["读文章", "Big Table", "分布式系统"]
{% include JB/setup %}
云计算的分布式表格依赖于下层的分布式文件系统(如Google的GFS)提供可靠和高效的数据存储,也是分布式文件系统的主要使用者。
行
行是二进制串,最大长度为64Kb。对统一行内的数据的读写总是原子的。
分布式表格系统总是把整个表格按照行排序(字典序),然后按整行动态划分,每个划分后的块称为一个子表(tablet,在google的Bigtable中,每个子表一般不超过256MB),子表也是分布式表格系统的worker加载/卸载和负载平衡的基本单元。
例如在网页库表格中,行是网页的URL,但其中的域名部分被颠倒了,
例如maps.google.com/index.html变成了com.google.maps/index.html,
这样使得域名相似的网页聚集在一起,由于域名相似的网页在内容上往往有一定的相似性,因此可以产生更高的压缩倍率,并使得一些应用程序更加高效。
列
列按(column family)列族分组,同一列族内的单元格的内容常常相同,并用修饰词(qualifier)区分不同的单元格,即column="family:qualifier"。一个表格内的列族个数是有限的且一般由可打印字符组成,但修饰词(qualifier)的个数没有任何限制且可以是任意字符。
Bigtable还允许用户把内容相似或相关的列族组成局部群组(locality group),同一局部群组内的列族的数据常常存放在一起,这样可以加快他们的访问速度;用户还可以把某些局部群组设定为装入内存。
列族是权限控制的基本单元。也就是说数据添加,查找,修改都要合适的权限。
局部群组则是数据压缩的基本单元,用户可以对不同的局部群组指定不同的压缩算法或者同一压缩算法的不同参数。
时间戳是64位整数,可以用来表示真正的时间,这时它的单位是微秒,时间戳也可以是用户指定的任意值。
Bigtable采用了3层B+树结构来存储表格数据,第三层为用户数据层(user data tablets),第二层为元数据索引层(metadata tablets),用来索引用户数据tablets,第一层为根索引层(root tablet),用来索引第二层数据。根索引层和元数据索引层的主要数据被设置为装入内存,应用程序需要访问用户数据时,Bigtable会根据需要依次访问root tablet和metadata tablets,这使得系统仅仅在访问用户数据时才访问磁盘。