Google的Bigtable

前一篇文章谈了Google的GFS,在着一篇,想说一说自己对bigtable的理解。Bigtable,是Google在GFS的基础上,再架设的一个专门用于快速处理大块数据的存储和读写的系统。Bigtable,从原理和数据模型上看,有面向列存储的数据库系统的味道,但又比面向列存储数据库有着更大的灵活性、扩展性,性能也更强大,因此,也不是同一个级别的东西。Bigtable的目的,是要提供一个能够快速处理大规模结构化数据的能力。它是基于多维稀疏map的一个典型应用。

从逻辑上,它的数据模型非常简单:< row, column, timestamp >--< value >这样的数据项。即行,列,时间戳同时作为键值,而任意字符串作为内容。简单地理解,可以认为,在普通DBMS的数据表的行列结构基础上,有一个行和一个列同时确定的cell当中,还可以以时间戳为维度,产生基于不同时间戳的值,比如,行A和列B确定一个格C,则C中,仍然在逻辑上可以按照时间戳来划分维度,所以,实际上Bigtable的行,列,格的维度都是可以任意扩展的,这就非常灵活了。相比普通我们使用的DBMS,例如Mysql等,如果建好了一个表,表的列通常是不变的,但是Bigtable可以随意再加多列。这就是它逻辑上的数据模型。

但实际上,bigtable的表项,在物理层面上还是按照一维的方式存放的,这时候,就需要考虑它的存储格式。简单来说,有这样的方式:

row+column+timestamp

作为键值,而原来的字符串内容仍然不变,于是,就变成了一个key-value对,而且是一维的。于是,这样就可以在物理上仍然按照一维存储,并且这是经过排序的,可以提高搜索的速度。至于物理存储是怎么管理的,后面还会细讲。

在进行实际的存储管理的时候,除了把数据一维化,还把数据按照行来进行分片。一般来说,一个bigtable的行是按照顺寻存放的,而在每隔一定量的数据行,就会划分成为一个tablet的小分片,因此,一个大的bigtable通常是有很多的tablet组成的,这些tablet将会分散到又GFS管理的集群上,每一个机器上有若干个tablet,保持每一个机器的容量和负载不至于过大。

一个tablet的存放也是非常讲究的,为了实现高效的存取,bigtable使用了一种简单的结构SStable,来完成实际的存储。这种sstable,实际就是一系列的key-value对,这些key-value是连续存储成块(符合GFS特性),并且这些key-value对会按照64k的方式来分成一个个block,所以,一个sstable,通常有若干个block,并且一个sstable会维护一个index数据信息,这些信息就是每一个block的起始键值以及对应在这个sstable中的偏移量。这样,就可以快速定位,快速读取数据。

上面这些,就是bigtable涉及的一些模块。总的来说,bigtable是一个非常强大的分布式数据库模型,通过这些设计,特别是充分利用了GFS的优势,使得可以支持任意多的机器,并且容错性强。与普通的DBMS(Oracle等),bigtable有几个明显的特点:

1. 数据逻辑非常简单,key-value对的方式,而且是string-string,没有特别的数据类型。

2. bigtable尽量提高数据的高速存取,繁杂的数据逻辑是通过上层的其他应用来实现的,比如,mapreduce,就是在bigtable上实现类似DBMS的SQL逻辑的很好的工具。

3. bigtable行列管理非常灵活,传统的DBMS的行列收到的约束较多。

4. bigtable能够快速简易地完成分布式部署和动态变化,DBMS是很难做到这一点的。

 

bigtable就总结到这里,在下面一篇文章,会继续总结mapreduce的特点。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值