bigtable是结构化数据的分布式存储系统。
1. 数据结构:
1.1 行
通过字典书序排序。用户可以根据需要选择合适的行命名,尽量使相关行挨着牌,就可以在查询类似数据时进行快速查询。比如论文中给的maps.google.com,就可以把跟maps.google相关的数据挨着最近,其次是maps。所以这里的行命名比较重要。
1.2 列族
列族的元素应该是同一类型,后面在数据传输过程中可以进行压缩。命名方式:列族名:列名(family:qualier)。这种方式同样是为了更好的排序,快速查询。
访问控制、磁盘和内存的使用统计都是在列族层面进行的。在我们的Webtable的例子中,上述的控制权限能帮助我们管理不同类型的应用:我们允许一些应用可以添加新的基本数据、一些应用可以读取基本数据并创建继承的列族、一些应用则只允许浏览数据(甚至可能因为隐私的原因不能浏览所有数据)。
由此看来,貌似也是可以对数据进行任意更改的。。。。后面可能会说到吧。
1.3 时间戳
bigtable的每个单元,也就是列都包含多个版本的数据,可以通过版本号来检索到这些数据。默认按照时间戳倒叙排列,以便于查询最新的数据。当然不是所有版本的数据都保存着,bigtable提供了两个控制参数,决定控制保存多新的数据,比如三周。
2. API
bigtable目前只支持单行的事务处理,不能跨行。
其次,Bigtable允许把数据项用做整数计数器???不理解。。
Bigtable允许用户在服务器的地址空间内执行脚本程序。脚本程序使用Google开发的Sawzall【28】数据处理语言。
Bigtable目前已经有了很多与mapreduce对接的类,能够作为mapreduce的输入输出。
3. bigtable的组成
依赖于GFS分布式集群,存储格式是google SSTable格式,Map结构。打开时索引被加载到内存,使用二分法查找。
依赖于chubby,一个序列化的分布式锁服务组件:
确保只有一个活动的master;
存储bigtable数据的启动位置(the bootstrap location);
查找Tablet服务器,以及在Tablet服务器失效时进行善后;
存储BigTable的结构信息(每张表的列族信息);
存储访问控制列表(ACL);