数据库资讯

NOSQL之旅 -----HBase

定义了name,age,sex等属性,User的属性是不能动态增加的。但是如果 采用列存储系统,比如Hbase, 那么我们可以定义User表, 然后定义info 列 族,User的数 据可以分为:info:name = zhangsan,info:age=30,info:sex=male等, 如果后来你又想增加另外的属性,这样很方便只需要info:newProperty就可以了。

也许前面的这个例子还不够清晰,我 们再举个例子来解释一下,熟悉SNS的 朋友,应该都知道有好友Feed, 一般设计Feed, 我们都是按照“某人在某时做了标题为某某的事情”,但是同时一般我们也会预留一下关键字,比如有时候feed也许需要urlfeed需要image属性等,这样来说,feed本身的属性是不确定的,因此如果采 用传统的关系数据库将非常麻烦,况且关系数据库会造成一些为null的单元浪费,而列存储就不会出现这个问题,在Hbase里,如果每一个column 单元没有值,那么是占用空间 的。下面我们通过两张图来形象的表示这种关系:

          

 

   上图是传统的RDBMS设计的Feed表,我们可以看出feed有多少列是固定的,不能增加,并且 为null的列浪 费了空间。但是我们再看看下图,下图为HbaseCassandra,Bigtable的数 据模型图,从下图可以看出,Feed表 的列可以动态的增加,并且为空的列是不存储的,这就大大节约了空间,关键是Feed这东西随着系统的运行,各种各样的Feed会出现,我们事先没办法预测有多少种Feed,那么我们也就没有办法确定Feed表有多少列,因此Hbase,Cassandra,Bigtable的 基于列存储的数据模型就非常适合此场景。说到这里,采用Hbase的这种方式,还有一个非常重要的好处就是Feed会自动切分,当Feed表中的数据超过某一个阀值以后,Hbase会自动为我们切分数据,这样的 话,查询就具有了伸缩性,而再加上Hbase的 弱事务性的特性,对Hbase的 写入操作也将变得非常快。

 

 

 

 

希望看到您的想法,请您发表评论x