【译】Cassandra 和 HBase 中使用的 BigTable 模型

来源:百度文库 编辑:神马文学网 时间:2024/04/25 23:06:53

【译】Cassandra 和 HBase 中使用的 BigTable 模型

NoSQL iammutex 十月 9th. 2010, 10:06下午【阅读:148次】

看到一篇好文章,部分翻译在此供大家参考。(PS:翻译部分全部是意译,挑了一些重点进行解释,详尽介绍和未翻译部分请参照原文。具体的一些实现原因,也可以参考我的上一篇文章《NoSQL理论之-内存是新的硬盘,硬盘是新的磁带》)

众所周知,BigTable是NoSQL数据库的王者,其论文更是NoSQL理论的基石,但遗憾的是BigTable不开源,于是有了开源的BigTable版本这一说法,其中的佼佼者包括今天提到的两位:Cassandra和HBase。

本文主要对Cassandra和HBase特性和实现中对BigTable理论的应用。

1.Fundamentally Distributed(分布式存储)

项目从最初规划上,就是为海量数据服务的,当然分布式存储的思想也是扎根于其血脉中。分布式系统主要需要考虑两个方面:partitioning(分区存储,也可以理解为通常说的Sharding)、replication(数据复制,主要是将数据复制成多份以提高可用性)。

2.Column Oriented(列式存储)

和普通的RDBMS不一样,普通的RDBMS通常是行式存储的,一行数据是连续存在一段磁盘空间上的。而列式存储是将各个列分别进行连续的存储。也正是因此,它对于处理字段中的NULL字段,能够不占用过多的空间。同时能够支持灵活松散的列定义。也就是我们通常所说的schema-less。

3.Sequential write(顺序写磁盘)

BigTable型系统的一个特点是其对写性能进行的优化。它的写都是通过先记一条操作日志,然后直接写在内存中的数据集合,然后其集合按条件或定时将数据flush到磁盘。这里涉及到的记操作日志或者数据flush到磁盘都会顺序的磁盘操作。故而避免了磁盘随机操作造成的无谓的磁盘寻道时间。

4.Merged read(读操作数据合并)

上面说到写操作是通过定时将数据直接flush到磁盘进行的,每次flush都会生成一个数据块,那可能造成一个数据在多个数据块中的情况,而在读的时候就需要将这多个版本中的值进行合并。其中在判断一个数据块是否包含指定值时使用了bloom-filter算法。

5.Periodic Data Compaction(定期数据合并)

同样是上面说到的,一个数据可能存在于多个数据块,如果我们不做处理,随着时间的推移,数据块会越来越多。所以BigTable型系统会进行定时的数据合并。在上面讲到的将内存中的数据直接flush到磁盘的过程中,flush之前进行了一次数据的排序操作,既是说存在磁盘中的块中的数据,都是顺序的,那么对一堆顺序的数据进行排重合并,其实和我们熟知的多路归并排序很相似。故而其定时数据合并的效率也是非常高的。

接下来的部分是关于标题中的两个产品Cassandra和HBase在这些理论上的具体实践和修改。暂时就不翻译了。有兴趣的同学可以查看英文原文。

标签:BigTable, Cassandra, HBase, 分布式, 列式存储