Hycz's Blog

Life is a game. Why so serious?

2011/06/28 BigTable中与Cassandra中的数据模型比较

一、Cassandra中的典型数据结构

二、BigTable中与Cassandra中的数据模型比较

BigTable中的数据模型更加像是建立在关系型数据库的表之上的,一个KeySpace就类似于从前的一个Table。所不同的是,BigTable中加入了几个新的特点:

1,按列存储,对于稀疏表更加友好;

2,Column Family,翻译过来就是列族,其实呢,就是把几个关联性强的列储存在一起,这个概念既是逻辑上的,也是物理上的,但是使用者其实并不需要太过关心于Column Family,设计时也不会从Column Family开始

3,历史数据,这里像是借鉴了数据库概念中的时态数据库(Temporal Database),保留了一个column中的历史数据,于是引入了timestamp。

所以呢,BigTable的数据模型更像是这样:

其中的值部分可能是稀疏的,但是按列存储避免了稀疏大表的资源浪费。

Cassandra中的数据模型更加像是建立在BigTable之上,然后加入了一个SuperColumn的概念。然后无论是网上流传的Cassandra中的数据模型使用方法,还是《Cassandra The Definitive Guide》中所介绍的数据模型部分,似乎都与BigTable中的数据模型迥异了,原本的BigTable还有与传统的Table的类比之处,如KeySpace与Table,Column与Column,但是在Cassandra中,KeySpace类似于Application,ColumnFamily类似于Table。个人觉得原因有两个:

1,由于引入了SuperColumn的概念,使得数据模型从BigTable中的KeySpace->Key->ColumnFamily->Column,变成了KeySpace->Key->ColumnFamily->Column或者KeySpace->Key->ColumnFamily->SuperColumn->SubColumn,于是数据维数上升了,而且变得不确定了,有时4维有时5维的数据模型就缺少一个通用的使用方法。虽然SuperColumn的引入丰富了整个数据模型,但是我认为由于原本的四维数据模型已经足够简约和使用,SuperColumn只能算作锦上添花,而且由于Cassandra本身功能不够强大,如果使用SuperColumn回来带来一些问题,例如索引问题,条件搜索的实现更加困难。

2,Cassandra的固有实现问题。可能在一开始的时候,Cassandra的开发人员对BigTable的模型理解就有偏差(这里并没有对不对的问题,只是与更广泛的理解略有不同),所以KeySpace的实现就不是当做一个Table来实现的,所以才会出现早期版本中必须重启整个Cassandra集群才能添加新KeySapce的情况,在后来的版本中,多KeySpace也并不被鼓励。

所以,Cassandra的数据模型更像是这样:

如图中所示,虽然这是一个KeySpace,但是这个KeySpace实际上是被切成了几份,Key虽然看似是同等的地位,但是实际上是分别专用于不同的ColumnFamily,并不能通用,他们的命名方式也各不相同。总的来说,这也是一个稀疏的大表,只不过空洞部分更加集中(图中XX部分),而有意义的ColumnFamily中(着色部分)空洞则少得多。而由于按列存储的机制,确实使得ColumnFamily看起来更像一个Table了。

比较BigTable和Cassandra中的数据模型,二者其实很相似,如果真的愿意的话,实际上可以互相转化。不过针对BigTable的设计更偏重于以row为单位,一个row中的内容可以非常丰富,而针对Cassandra的设计更偏重于以ColumnFamily为单位,KeySpace的意义被淡化了。

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: