一.BigTable算法
1.bigtable能够动态控制数据分布和格式,他提供了简单的数据模型。数据库
2.bigtable使用了不少数据库策略,并行数据库和内存数据库,他的不一样时能够动态控制数据分布式和存储。缓存
3.用户能够把结构或半结构化的数据串行化,选择相关的数据模式,控制数据位置相关性,经过参数控制保存到内存或硬盘中。服务器
4.bigtable的结构像一个立体空间结构。key(行,列,时间)。按行分区,每一个区就是一个tablet,数据分布和均衡的最小单位。列族通常最多几百个,每一个列族有不少个列关键字,而时间是列的版本。网络
5.时间戳信息是列的版本信息,有时是一个网络爬虫爬到的时间戳信息。oracle
6.能够和MapReduce结合使用,MapReduce是个并行框架,可使bigtable做为它的数据输入输出。框架
二.BigTable构件分布式
1.bigtable使用GFS存储日志和数据文件。性能
2.bigtable内部存储数据文件是SSTable,它是个持久排序的Map结构,是一个数据块,用加载到内存的索引定位(用二分法定位数据位置)。google
3.Chubby是个文件锁什么的原理没明白?
4.bigtable包括链接客户端的库,一个Master(负载和垃圾收集)多个tablet服务器,通讯时候直接和tablet服务器通讯,因此Master是个调配管控的做用,负载通常不会很是大。
5.Tablet位置
Root tablet是个行关键字(表标志&最后一行编码)。(若是每一个Tablet存储128MB数据,那么一共能够存储2^61字节数据)。大约:2147483648GB。
tablet放在内存中,能够预取减小可能的开销(NameNode),还有一个次级信息用来排查错误和性能分析(SecondNameNode)。
这个地方很差理解的是,tablet服务器加入后再chubby中放一个文件做为会话的独占锁,tablet服务器退出时候会尝试释放这个独占锁,因此Master就是判断这个锁来判断tablet服务器是否还提供服务。
6.tablet分配,master会扫描现有原数据和tablelet服务已分配信息,以为该怎么分配tablelet。
三.tablet服务
1.更新时候写日志,而后用Redo point来重建memtable,最近提交的排序缓存是memtable。读时候从sstable和memtable字典顺序合并的视图表中读取。w/r都有一个从Chubby中判断用户权限的过程。读写分割合并是能够同时进行的。
2.空间收缩
没太看明白啥过程?只不过知道有一种缓存到必定程度转SStable的过程,和合并后,删除回收数据空间的过程。
3.局部性群组
解决位置相关性列族的访问速度,将有位置关联须要或特定要求的列族划分为一个局部性群组,把频繁访问的小块数据放入内存或缓存是一种方法。
4.压缩
压缩时速率重要,同时空间比率也有较大提高,由于采用的算法选择适合的行得到了同个主机相同的数据聚簇以提升压缩比率。
5.缓存读取提升性能
缓存Key-value 和block,有位置局部性读取,能能更好。
6.bloom过滤器牺牲了一部份内存代价得到了是否访问硬盘的特性。
7.commit日志不是原来的每一个tablet服务器一个,按(table,row name,log sequence number)排序,过程也是Master主导的并行排序。写日志的时候也是线程并行写的,并且有序号的惟一性,实现时就能够读时候按块连续读。
8.tablet恢复提速压缩日志并避免从新从日志中恢复。
9.SSTable缓存外的SSTable是不变的,因此咱们分隔时能够没必要为每一个分隔出的Tablet创建SSTable集合,能够共享原来的Tablet的SSTable。
10.性能图看基本上读取次数和读取量虽不成正比,基本仍是线性提高的。
11.单个tablet服务器性能提高
序列读/随机读性能要考虑到文件大小,是否放入内存/缓存中。序列写/随机写,性能至关。
12.性能提高
单个服务器可能受CPU限制,随机读取可能受网络中的Block传输限制。还有网络不均衡和移动后暂不可用形成。
13.实际应用
1个Bigtable集群运行在各类各样的服务器集群上。
14.google earth用的就是地理划分为行,列族存储地理数据原,用in-memory的列族。
15.经验教训
a,各类可能的异常,硬件,网络的,不假定只返回错误集合中的一个值。
b,tablet结构上锁问题,同步问题,METADATA访问挂起问题,GFS写入慢等操做问题都会有所监控和记录。监控集群状态,流量等信息。
c.设计简单的协议,最普遍使用的特性的协议。
16.相关工做
尝试过一些其余组件的B-tree,Key-value pair。还有oracle,IBM,db2还尝试了一个行的事物功能的完整性处理。Bigtable局部性也有以列压缩存储和读取性能的方案。bigtable也是支持每台服务器数千次操做的。
四.结论
bigtable能够随着时间的增长,经过简单的增长机器,扩展系统的承载能力。它给的存储方案带来不少优点,能够设置本身的模型,以及用到的其余google基础构件,若是出现瓶颈或效率,能比较快速的解决。