HBase数据模型(一) | 「掘金日新计划 · 12 月更文挑战」

133 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天

一、本篇笔记的重点内容

  • Hbase的逻辑模型(数据模型)
  • HBase的物理存储模型

二、详细知识点介绍

Hbase的逻辑模型(数据模型)

在介绍HBase的逻辑模型之前,先看下这幅图,是什么结构(几行几列)

image.png

按照关系型数据库的思维来说是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上,开成分布式的存储模式。