我所理解的HBase

一、HBase是什么?

1、HBase是基于Apache Hadoop的数据库,由Chang等人基于Google的BigTable开发而成。其目标是只需使用普通的硬件配置就可以处理由千上万的行和列(billions of rows X millions of columns)所组成的大数据。

2、HBase是一种 "NoSQL" 数据库.  "NoSQL"是一个通用词表示数据库不是RDBMS ,后者支持 SQL 作为主要访问手段。有许多种 NoSQL 数据库:  BerkeleyDB 是本地 NoSQL 数据库例子, 而 HBase 是大型分布式数据库。  技术上来说,  HBase 更像是"数据存储(Data Store)" 多于 "数据库(Data Base)"。因为缺少很多RDBMS特性,  如列类型,第二索引,触发器,高级查询语言等.  

二、HBase有什么特点?

1、按列存储:可以动态的增加属性列;列值为空的不存储,节省空间;可以实现高性能的并发读写操作。
2、数据类型全部为字符串
2、只支持简单的增删查操作,不支持连接查询和条件查询
4、数据更新时会保留旧版本的数据
5、可伸缩性强,可以对数据进行透明的切分,便于分布式存储

三、什么时候用HBase?

HBase不适合所有问题.

首先,确信有足够多数据,如果有上亿或上千亿行数据,HBase是很好的备选。 如果只有上千或上百万行,则用传统的RDBMS可能是更好的选择。因为所有数据可以在一两个节点保存,集群其他节点可能闲置。

其次,确信可以不依赖所有RDBMS的额外特性 (e.g., 列数据类型, 第二索引, 事物,高级查询语言等.)  一个建立在RDBMS上应用,如不能仅通过改变一个JDBC驱动移植到HBase。相对于移植,需考虑从RDBMS 到 HBase是一次完全的重新设计。 

第三, 确信你有足够硬件。甚至 HDFS 在小于5个数据节点时,干不好什么事情 (根据如 HDFS 块复制具有缺省值 3), 还要加上一个 NameNode.                

HBase 能在单独的笔记本上运行良好。但这应仅当成开发配置。

四、HBase的数据模型

简单来说,应用程序是以表的方式在HBase存储数据的。表是由行和列构成的,所有的列是从属于某一个列族的。行和列的交叉点称之为cell,cell是版本化的。cell的内容是不可分割的字节数组。表的行键也是一段字节数组,所以任何东西都可以保存进去,不论是字符串或者数字。HBase的表是按key排序的,排序方式是针对字节的。所有的表都必须要有主键-key. 

1、概念视图

下面是根据BigTable 论文稍加修改的例子。

有一个名为webtable的表,包含两个列族:contentsanchor.在这个例子里面,anchor有两个列 (anchor:cssnsi.comanchor:my.look.ca),contents仅有一列(contents: html

Row KeyTime StampColumnFamily contentsColumnFamily anchor
"com.cnn.www"t9 anchor:cnnsi.com = "CNN"
"com.cnn.www"t8 anchor:my.look.ca = "CNN.com"
"com.cnn.www"t6contents:html = "<html>..." 
"com.cnn.www"t5contents:html = "<html>..." 
"com.cnn.www"t3contents:html = "<html>..." 
一个列名是由它的列族前缀和 修饰符(qualifier)连接而成。例如列 contents:html是列族 contents加冒号( :)加  修饰符 html组成的。

2、物理视图

 尽管在概念视图里,表可以被看成是一个稀疏的行的集合。但在物理上,它的是区分列族 存储的。新的columns可以不经过声明直接加入一个列族. 

ColumnFamily anchor

Row KeyTime StampColumn Family anchor
"com.cnn.www"t9anchor:cnnsi.com = "CNN"
"com.cnn.www"t8anchor:my.look.ca = "CNN.com"

ColumnFamily contents

Row KeyTime StampColumnFamily "contents:"
"com.cnn.www"t6contents:html = "<html>..."
"com.cnn.www"t5contents:html = "<html>..."
"com.cnn.www"t3contents:html = "<html>..."

值得注意的是在上面的概念视图中空白cell在物理上是不存储的,因为根本没有必要存储。因此若一个请求为要获取t8时间的contents:html,他的结果就是空。相似的,若请求为获取t9时间的anchor:my.look.ca,结果也是空。但是,如果不指明时间,将会返回最新时间的行,每个最新的都会返回。例如,如果请求为获取行键为"com.cnn.www",没有指明时间戳的话,活动的结果是t6下的contents:html,t9下的anchor:cnnsi.comt8anchor:my.look.ca。 

五、参考

1、Apache HBase:http://hbase.apache.org/

2、HBase 官方文档中文版:http://abloz.com/hbase/book.html

3、NOSQL之旅---HBase:http://www.jdon.com/38244

4、HBase按列存储的真相:vemitter.blog.163.com/blog/static/16579813420121965726138/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值