在介绍HBase之前,很有必要先说明一下行式存储和列式存储的区别以及各自的优缺点。
传统关系型数据库所采用的是行式存储,数据库中的一张表的数据是连续放在一起存储的。这样带来的好处是:INSERT/UPDATE(插入数据、修改数据)容易。但也有其弊端,选择时,即使仅涉及其中的某几列,所有数据也都会被读取,并且列数不能太多(一般不超过30列),可以理解为牵一发,而动全身。行式存储主要适用于OLTP(On-Line Transaction Processing ,联机事务处理过程,也称为面向交易的处理过程)。
采用列式存储时,每列的数据会集中存储,不同列的数据则会分开保存。其优点为:查询时被涉及的列才会被读取;任何列都可以作为索引;相同列的数据存放在一起,数据压缩更容易(可以节省空间);列数可以有很多。其缺点也很明显,每次选择完成时,被选择的列需重新组装,以及INSERT/UPDATE比较麻烦。列式存储主要适用于OLAP(On-Line Analytic Processing ,联机分析处理过程)。
HBase是Hadoop生态系统中的重要一员,常构建在HDFS上,是一个可以提供高可靠性、高性能、可伸缩、实时读写、分布式的列式数据库,是Google公司Big Table(一个分布式的结构化数据存储系统)思想的开源实现,具有存储非结构化数据的能力。HBase采用了上文所说的列式存储,因此具有良好的分布式扩展能力(通过不断增加服务器来增加存储能力)。
HBase具有以下特性:
1.伸缩性强(横纵向)。
2.自动分区。当表增长时,表会自动分裂成Region(HBase数据存储和管理的基本单位),并基本发布到可用节点上。值得一提的是一个HBase表由一个或一个以上Region组成,随着表中的存储数据增多,Region的值也会增加,但数据量达到阈值时,一个Region则会分裂出多个新的Region。
3.支持线性扩展和对新节点的自动处理。
4.支持普通商用硬件。
5.容错能力强,充分利用了Hadoop文件系统提供的容错能力。
6.检索能力强。
HBase的本质是一个稀疏的、多维的、持久化存储的映射表,它采用行健、列族、列限定符、时间戳来进行数据索引。HBase数据模型包含以下概念:
1.表(Table) HBase采用表来组织数据,表由行和列组成,列可划分为若干个列族(Column Family)。
2.行(Row) 每个行由行键(RowKey)来标识。行键可以是任意字符串的字节数组,按字典序排序。访问表中的行有三种方式:通过单个行键访问、通过一个行键的区间来访问、全表扫描。
3.列族(Colunm Family) 列族必须在表的定义阶段给出,列族的成员数量可以是一个也可是多个,且列族的成员不必在表定义时给出,可随后按需、动态加入。HBase的列式存储就是根据列族分开存储,每个列族对应一个存储区域。
4.列限定符(Qualifier) 列族中的数据通过列限定符来定位,列限定符不需要事先定义,也不需要在不同行间保持一致。通常简称为列(Column)。
5.单元格(Cell) 单元格由行键、列族、列限定符、时间戳唯一决定。单元格中的数据是没有类型的,以字节码形式存储。
6.时间戳(Timestamp) 时间戳通常也称为版本(Version)。数据单元存储的时候,会按时间戳来排序,所以在查询时若不提供时间戳,会返回距离当前最近的那个版本的数据。
关于HBase的系统架构和安装步骤我会在后面的博客记录(主要是今天就只学到了这点)。
写的虽然很简陋,但这是我今天所了解到的一些相关知识。如果有错误或者遗漏,欢迎各位大佬和前辈指出,感激不尽。
此外EDG加油!