最近了解了一下hbase,主要用于Hadoop生态,它的数据结构是一种基于列存储的高阶有序稀疏MAP,它的数据主要存储在HDFS上,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper进行分布式协同服务,主要用来存储非结构化和半结构化数据。

一、数据存储结构

Hbase存储的数据由以下几部分构成:

RowKey: 行键,可理解成MySQL中的主键列。

Column: 列,可理解成MySQL列。

ColumnFamily: 列族, HBase引入的概念,多个近似列集合在一起组成一个列族;

TimeStamp:在更新数据时,用时间戳来标识一行数据的不同版本。

下面进入服务器看下数据:

首先使用hbase shell进入终端,然后查询数据:

Hbase的数据结构 hbase 结构化数据_Hadoop

scan 'P_test',{LIMIT => 2}  #查出来两条数据,=>前后要有空格

我们看到,两条数据其实对应的是两条不同的rowkey,我们在插入的时候就插入了四种数据,HZ,Num,Str,Time,

ROW                                        COLUMN+CELL
0000029TGNPOD8MJYH2OWZYG2CKV1BF8I5SDOTRFL column=info:HZ, timestamp=1604324612780, value=\xB7\xA8\xB7\xA8\xB4\xE6\xB3\xC9\xD7\xD4
1CI8HC4TIHLON13PVFRY1IG4

以第一条数据为例,我们看到Rowkey为1CI8HC4TIHLON13PVFRY1IG4

列族为info,列名为HZ,timestamp为1604324612780,value是值,所以数据存储的结构如下:

Hbase的数据结构 hbase 结构化数据_数据_02

二、两种查询方式

1.快速查询:
快速查询是从HDFS读取数据,hbase是根据rowkey查询的,只要能快速的定位rowkey, 就能实现快速的查询,主要是以下因素:
1、hbase是可划分成多个region,可以理解为关系型数据库的多个分区。
2、键是排好序了的
3、按列存储的
2.实时查询:
实时查询,可以认为是从内存中查询,一般响应时间在1秒内。HBase的机制是数据先写入到内存中,当数据量达到一定的量(如128M),再写入磁盘中, 在内存中,是不进行数据的更新或合并操作的,只增加数据,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。