BigTable小结

标签: bigtable | 发表时间:2011-08-31 23:16 | 作者:绿豆芽33 MAGI-CASPER/Peter Pan
出处:http://www.cnblogs.com/wangyonghui/

读完Bigtable论文小结一下。


对于Bigtable的整体理解 

BigTable将数据存储分为两部分:最近的更新存储在内存(memtable)中,较老的更新则以SSTable的格式存储在GFS,后者是主体部分,不可变的数据结构。写操作的内容插入到memtable中,当memtable的大小达到一个阈值时就冻结,然后创建一个新的memtable,旧的就转换成一个SSTable写入GFS

读操作时还要综合考虑memtableSSTable,如果写操作时产生的SSTable越来越多,就会影响读性能。于是采用merging compaction——读取一些SSTablememtable的内容,合并成一个新的SSTable,之后删除被合并的SSTablememtable的内容。还不够的话就合并所有的SSTable到一个新的SSTable,即major compaction

1.功能性描述

Bigtable不支持关系数据模型,它提供的数据模型允许客户控制数据的分布和格式,数据没有模式(schema),由用户自己定义。用户可以推测底层存储数据的位置相关性,在读取数据的时候可以一次预取出来。

Bigtable将存储的数据都视为字符串,由行和列关键字索引数据。通过Bigtable的模式参数可以控制数据是存放在内存中、还是硬盘上。

2.数据模型

Bigtable是一个多维度的有序的map。由行列关键字和时间戳索引。行关键字可以是任意字符串,对一行的读写操作是原子的,不管该行有多少列。按行划分table,产生一些tablets,一般是连续的几行有一定的相关性,这样可以获得局部好的特性。列关键字可以分组归类,列族。一个列族内的数据一般具有相同的类型,可以进行压缩。列关键字命名使用“列族:标识”的形式。时间戳用来标识数据的不同版本。

3.底层

Bigtable内部存储数据的文件是SSTable格式的,SSTable是一个有序的不可更改的map结构。从内部看,SSTable包含是一系列数据块,使用存储在SSTable最后的块索引来定位数据块。

Bigtable还依赖一种分布式锁服务Chubby。BigTable怎样使用Chubby的锁服务的?

4.tablet位置信息

为了管理巨大的table,把table按行分割,这些分割后的数据统称为tablets。tablets分布存储到计算平台中的任意机器上。对tablet位置的索引是怎样完成的呢?采用三级层次建立对tablet的索引:

第一层是存储在chubby中的一个文件,包含了root tablet的位置,root tablet是METADATA表的第一个tablet,它包含了METADATA表的所有其他tablets的位置。每一个METADATA tablet包含了一组user tablets的位置。

METADATA表的每个tablet的位置位于行关键字的下面,这个行关键字由tablet所在的表的标识符和tablet 的最后一行编码而成。

client library caches tablet locations问题:client怎么得到的tablet locations。

5.tablet分配

master服务器记录当前有哪些活跃的tablet服务器,哪些tablet分配给了哪些tablet服务器,哪些tablet还没分配。当一个tablet还没被分配并且刚好有一个tablet服务器有足够的空闲空间装载该tablet时,master服务器就会向这个tablet服务器发一个load请求,把tablet分配给它。

大体过程:

master服务器从chubby抢占一个唯一的master锁(阻止创建其他的master服务器实例);

master扫描chubby的服务器目录(当一个tablet服务器启动时,在chubby的一个指定目录下创建一个名字唯一的文件,并获得该文件的独占锁),获取当前正在运行的服务器列表;

master服务器和列表中的所有tablet服务器通信,获取每个tablet服务器上的tablet分配情况,如果发现root tablet还没分配,master将其加入未分配的tablet集合;

master服务器扫描METADATA table获取tablet集合,扫描过程中如果发现某个tablet尚未分配,master就将其加入到未分配的tablet集合中。

master服务器负责检查tablet服务器是否还能为它的tablet提供服务,并尽快重分配它加载的tablet。master通过周期地询问tablet服务器它的文件锁状态,如果一个tablet服务器报告它丢失了文件锁,或者master经过几次尝试不能与它通信,那么master就尝试获取该tablet服务器文件的独占锁。获取成功则删除tablet服务器在chubby上的服务器文件以确保不再提供服务,一旦删除,master就将原来tablet服务器上的tablets放入未分配的tablet集合中。

6.

Tablet的更新操作事件提交到一个commit log that stores redo records(恢复tablet时使用),最近提交的内容则存放到memtable中,较早提交的更新则存放到一系列SSTable中。

写操作:写操作请求到达tablet服务器时,tablet服务器首先检查操作格式、操作权限。有效的修改操作记录到commit log中,写的内容则插入到memtable中。

读操作:也要先检查,有效的读操作在一系列SSTable和memtable的合并视图中执行。

minor compaction:

随着写操作的执行,memtable的大小不断增加,当达到一个阈值时就冻结,然后创建一个新的memtable,旧的就转换成一个SSTable写入GFS。

每一次minor compaction都会产生一个新的SSTable,持续下去的话读操作可能要合并相当多的SSTable,解决的办法是定期地在后台执行merging compaction——读取一些SSTable和memtable的内容,合并成一个新的SSTable,之后删除被合并的SSTable和memtable的内容。

major compaction:

合并所有的SSTable到一个新的SSTable的megingcompaction过程叫major compaction。BigTable循环扫描它所有的tablets,定期执行major compaction。

7.优化

划分局部性群组

压缩——SSTable分块压缩,读一部分数据时无须解压缩整个文件;两遍压缩

缓存提高读性能——两级缓存,扫描缓存和块缓存

bloom filters——读操作时要读组成一个tablet状态的所有SSTable,利用bloom 

filter过滤SSTable是否包含特定的行列信息。

commit log——每个tablet服务器一个commit log,两个线程写。

加速tablet恢复:

master把一个tablet从一个tablet server移到另一个server时,源server先对tablet做一次minor compaction,之后源server停止对该tablet的服务,但在卸载该tablet之前还要再做一次minor compaction以消除上次执行minor compaction时残余的未压缩的记录。

利用不变性——memtable是唯一一个能被读和写操作同时访问的可变数据结构,为了减少读操作的竞争,采用写时复制技术允许读写并行执行。

作者: 绿豆芽33 发表于 2011-08-31 23:16 原文链接

评论: 0 查看评论 发表评论


最新新闻:
· 马云:阿里巴巴要做21世纪数据分享平台(2011-09-10 17:48)
· Facebook聘用OpenAppMkt创始人 负责斯巴达项目(2011-09-10 17:44)
· 首个计算机Bug的由来(2011-09-10 14:32)
· 亚马逊应当收购Hulu的六大原因(2011-09-10 14:32)
· Groupon数百员工集体诉讼索要3年加班费(2011-09-10 14:31)

编辑推荐:从微博的改版谈网页重构

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [bigtable] 推荐:

BigTable小结

- MAGI-CASPER/Peter Pan - 博客园-唯有前进值得敬仰
读完Bigtable论文小结一下. 对于Bigtable的整体理解 . BigTable将数据存储分为两部分:最近的更新存储在内存(memtable)中,较老的更新则以SSTable的格式存储在GFS,后者是主体部分,不可变的数据结构. 写操作的内容插入到memtable中,当memtable的大小达到一个阈值时就冻结,然后创建一个新的memtable,旧的就转换成一个SSTable写入GFS.

[转][转]LSM-Tree (BigTable 的理论模型)

- - heiyeluren的Blog
LSM-Tree理论模型:. 来源:http://www.cnblogs.com/raymondshiquan/archive/2011/06/04/2072630.html . Google的BigTable架构在分布式结构化存储方面大名鼎鼎,其中的MergeDump模型在读写之间找到了一个较好的平衡点,很好的解决了web scale数据的读写问题.

【分布式系统工程实现】Bigtable Merge-Dump存储引擎

- XiaoHui - NOSQL Notes
单机存储引擎解决单机读写问题,Merge-Dump存储引擎设计成一种通用的存储引擎,同时支持数据写入,随机读取和顺序扫描功能. 顺序扫描功能应用很广,比如MapReduce批处理,同一个广告主的所有关键词广告统计,用户浏览所有的收藏信息,淘宝卖家管理大量的商品等. 简单的KV系统只需要支持随机读取,而类似Bigtable这样的通用表格系统需要考虑基于主键的顺序扫描功能.

【分布式系统工程实现】GFS&Bigtable设计的优势

- hikerlive - 淘宝核心系统团队博客
目前,知名度比较高的通用存储系统包括:Google GFS&Bigtable,Amazon Dynamo,Microsoft Azure存储系统及Yahoo PNUTS. 其中,GFS&Bigtable,Azure存储系统及Yahoo PNUTS都有总控节点,Amazon Dynamo采用去中心化的P2P设计.

解读BigTable类NoSQL数据库的选型与设计

- - searchdatabase
  BigTable类数据库系统(HBase,Cassandra等)是为了解决海量数据规模的存储需要设计的. 这里说的海量数据规模指的是单个表存储的数据量是在TB或者PB规模,单个表是由千亿行*千亿列这样的规模组成的. 提到这个数据规模的问题,不得不说的就是现在在NoSQL市场中,最火的四种NoSQL系统依次是MongoDB,Redis,Cassandra,HBase.

Bigtable:一个分布式的结构化数据存储系统[中文版]

- Bian Jiang - Alex && OpenCould
Bigtable:一个分布式的结构化数据存储系统. Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的数据. Google的很多项目使用Bigtable存储数据,包括Web索引、Google Earth、Google Finance.