一、HBase 数据库是什么
- HBase 是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库
- HBase 是一个利用 HDFS 来存储数据、利用 MapReduce 来处理数据、利用 Zookeeper 作为其分布式协同服务
- HBase 主要用于存储非结构化和半结构化的松散数据—NoSql 数据库
- HBase 的数据读写是将数据作标记,删除数据时并不是将数据直接在磁盘中删除,读取的时候是看标记
二、HBase 从哪里来
HBase 是来源于 Fay Chang 所撰写的 Google 论文 “Bigtable :
一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(FileSystem)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase 是 Apache 的 Hadoop 项目的子项目。HBase不同于一般的关系数据库,是一个适合于非结构化数据存储的数据库。
三、HBase 数据模型
HBase 数据模型是稀疏结构的数据,数据存储模型如下图所示:
如上图所示,以关系型数据的思维会感觉这是一张表,但是在 HBase 中这种理解是错误的,在 HBase 中上面的表格显示的只是一行数据;其中各单元格标题描述如下所示
1、RowKey
(1)决定一行数据的唯一标识
(2) RowKey 是按照字典顺序排序的
(3)RowKey 最多只能存储64k的字节数据,RowKey 设计越短越好
(4)Column Family列族(CF1、CF2、CF3) & qualifier列:
- HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema) 定义的一部分预先给出。如create ‘test’, ‘info’;
- 列名以列族作为前缀,每个“列族”都可以有多个列成员(column,每个列族中可以存放几千~上千万个列);如 CF1:q1, CF2:qw,
- 新的列族成员(列)可以随后按需、动态加入,Family下面可以有多个 Qualifier,所以可以简单的理解为,HBase中的列是二级列,也就是说 Family 是第一级列,Qualifier 是第二级列。两个是父子关系
- 权限控制、存储以及调优都是在列族层面进行的
- HBase把同一列族里面的数据存储在同一目录下,由几个文件保存
- 目前为止 HBase 的列族能够很好处理最多不超过3个列族