在使用Hbase之前,我们来简单的介绍一下HBase;
Hbase是一种分布式的列式的存储系统,和传统的RDBMS不一样;
Hbase是一种面向列的数据库;
那么什么是面向列?
坐标系大家都知道吧?(不知道请自行百度.哈哈哈哈)几个坐标放在一起可以指定到一个准确的位置;
Hbase中的数据需要通过行键(Rowkey以下称作rk),列族(ColumnFamily以下称作cf),列(Column以下称作 c),以及版本号(TimeStamp 默认为时间戳),来确定的;
下面是笔者总结的HBase和RDBMS的区别
比较 | RDBMS | Hbase |
---|---|---|
数据构成 | 行式 | 面向列族 |
数据类型 | 多种类型 | String |
事务 | 多行 | 单行 |
查询语言 | SQL | API |
安全性 | 授权&验证 | 高版本中也有 |
索引 | 指定列 | 基于Row_Key |
存储量 | TBs | ~1PB(只要HDFS足够) |
读写速度(s) | 千次 | 百万次 |
注:
如果想使用SQL在Hbase中查询可以使用Phoenix框架
或者使用Hive与Hbase集成,则可以使用一些Hive的手段去查询
比如现在有两个人将其记录到HBase中
RowKey | name | age | tel | address |
---|---|---|---|---|
xx1 | zhangsan | 25 | 186xxx | beijing |
xx2 | lisi | 16 | 147xxx | shanghai |
那么name为基础信息将其放进一个Column_Family中basic_info
age tle address 作为私有信息放进private_info中
id 作为一个Rowkey
那么通过
rk + cf + c + time ==> value
#也就像坐标一样
xx1 + basic_info + name + time ==> zhangsan
xx1 + private_info + age +time ⇒ 25
HBase和HDFS的区别
比较 | HDFS | Hbase |
---|---|---|
写入方式 | 仅能追加 | 随机写入 |
读取方式 | 全表扫描&分区扫描 | 随机读取&小范围扫描&全表扫描 |
SQL性能 | 非常好 | 比HDFS慢4-5倍 |
结构化存储 | 非常多 | 列族&列 |
存储量 | ~PB | ~PB |