在大数据场景中,除了直接以文件形式保存的数据外,还有大量结构化和半结构化的数据,这类数据通常需要支持更新操作,比如随机插入和删除,这使得分布式文件系统HDFS很难满足要求。为了方便用户存取海量结构化和半结构化数据,HBase应运而生。
HBase是构建在分布式文件系统HDFS之上的、支持随机插入和删除的列簇式存储系统,它可被简单理解为一个具有持久化能力的分布式多维有序映射表。
尽管HBase随机读写性能较高,但数据扫描速度较慢,难以适用于OLAP(On-Line Analytical Processing,联机分析处理,数据分析)场景,为此,Cloudera提出了Kudu项目,它能很好地兼顾吞吐率和延迟。
HBase的数据模型
逻辑数据模型
逻辑数据模型是用户从数据库所看到的模型,它直接与HBase数据建模相关;
类似于数据库中的database和table逻辑概念,HBase将之称为namespace和table,一个namespace中包含一组table, HBase内置了两个默认的namespace:
-
hbase:系统内建表,包括namespace和meta表。
-
default:用户建表时未指定namespace的表都创建在此。
HBase表由一系列行构成,每行数据有一个rowkey,以及若干column family构成,每个column family可包含无限列。
屏幕快照 2020-02-16 21.52.56.png
屏幕快照 2020-02-16 21.57.22.png -
rowkey:HBase表中的数据是以rowkey作为标识的,rowkey类似于关系型数据库中的“主键”,每行数据有一个rowkey,唯一标识该行,是定位该行数据的索引。同一张表内,rowkey是全局有序的(字典类型排序)。rowkey是没有数据类型的,以字节数组(byte[])形式保存。
-
column family:Hbase表中数据是按照column family(列族)组织的,每行数据拥有相同的column family。每个column family可包含无数个动态列(也就是column qualifier)。column family是访问控制的基本单位,同一column family中的数据在物理上会存储在一个文件中。
-
column qualifier:column family内部列标识,Hbase每列数据可通过family:qualifier(比如CF1:col1)唯一标识,qualifier不属于schema的一部分,可以动态指定,且每行数据可以有不同的qualifier。跟rowkey一样,column qualifier也是没有数据类型的,以字节数组(byte[])形式存储。
-
cell:通过rowkey, column family和column qualifier可唯一定位一个cell,它内部保存了多个版本的数值,默认情况下,每个数值的版本号是写入时间戳。cell内的数值也是没有数据类型的,以数组形式保存。
-
timestamp:cell内部数据是多版本的,默认将写入时间戳作为版本号,用户可根据自己的业务需求设置版本号(数据类型为long)。每个column family保留最大版本数可单独配置,默认是3,如果读数据时未指定版本号,HBase只会返回最新版本的数值;如果一个cell内数据数目超过最大版本数,则旧的版本将自动被剔除。
-
HBase也可以看作一个key/value存储系统,其中,rowkey是key,其他部分是value,也可以将[row key, column family, column qualifier, timestamp] 看做key, Cell中的值对应value。
物理数据存储
物理数据模型是面向计算机物理表示的模型,描述了HBase数据在储存介质(包括内存和磁盘)上的组织结构。
HBase是列簇式存储引擎,它以column family为单位存储数据,每个column family内部数据是以key value格式保存的,key value组成如下:
[row key, column family, column qualifier, timestamp] = >value
屏幕快照 2020-02-16 22.01.41.png
在HBase中,同一表中的数据是按照rowkey升序排列的,同一行中的不同列是按照column qualifier升序排列的,同一cell中的数值是按照版本号(时间戳)降序排列的,下图所示为一个HBase表从逻辑视图到物理视图的映射。
屏幕快照 2020-02-16 22.03.22.png
网友评论