开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天
一、本篇笔记的重点内容
- Hbase的逻辑模型(数据模型)
- HBase的物理存储模型
二、详细知识点介绍
Hbase的逻辑模型(数据模型)
在介绍HBase的逻辑模型之前,先看下这幅图,是什么结构(几行几列)
按照关系型数据库的思维来说是4行5列;但是在Hbase中,只有一行数据。
Hbase的数据存储逻辑,是按照能装载大数据量的逻辑来设计的,下面是逻辑模型的组件介绍:
- l Row Key
1) 每一行都有唯一标识符,这里是“RK000001”
2) Row key是按照字典的顺序排列的
3) Row key最多只能存储64k的字节数据
- l Column Family(列族)、Column(列)、Column Qualifier(列的限定符)
1) Hbase表中的每个列都归属于列族,列族必须在表定义时给出,这是的列族有“CF1”,“CF2”,“CF3”
2) 列名以列族作为前缀,每个“列族”都可以有多个列成员(column,每个列族中可以存放几千~上千万个列);新的列族成员(列)可以随后按需、动态加入。
3) 权限控制、存储以及调优都是在列族层面进行的
4) HBase把同一列族里面的数据存储在同一目录下,由几个文件保存
5) 目前为止HBase的列族能能够很好处理最多不超过3个列族
6) 列的限定符是列族中数据的索引。这里的列的限定符是“q1”、“q2”、“q3”、“q4”
7) HBase中的列包含用:分隔开的列族和列的限定符。这里的列如:“CF2:q1”
- l Cell(单元格)
1) 由行和列的坐标交叉决定
2) 单元格是有版本的(由时间戳来作为版本)
3) 单元格的内容是未解析的字节数组(Byte[]),cell中的数据是没有类型的,全部是字节码形式存贮。如:{row key,column(= +),version}
- l Timestamp(时间戳)
1)在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间 戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。
2)时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫 秒的当前系统时间。
3)时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突, 就必须自己生成具有唯一性的时间戳。
HBase的物理存储模型
从概念视图层面
HBase中的每个表是由许多行组成的,但是在物理存储层面 ,它是采用了基于列的存储方式。也就是说,HBase是一个“列式数据库”。
列式数据库采用DSM(Decomposition Storage Model)存储模型,以关系数据库中的属性或列为单位进行存储,关系中多个元组的同一属性值(或同一列值)会被存储在一起,而一个元组中不同属性值则通常会被分别存放于不同的磁盘页中。
列式数据库主要适合于批量数据处理和即席查询。
它的优点是:可以降低I/O开销,支持大量并发用户查询,其数据处理速度比传统方法快100倍,具有较高的压缩比。
在HBase表的物理存储中,采用了region的概念,即HBase中的每张表默认只有一个Region(Region用于保存数据表中某段连续的数据,如存储数据表中的若干行)。
随着数据量的增长,一个region会被拆分成两个或多个region,在物理存放时,Region会被存储至不同的HRegionServer上,开成分布式的存储模式。