HBase 数据模型

理解 HBase 的数据模型,能够更好的理解 HBase 针对 Region 的操作(Split、Compact等)的必要性。

逻辑模型

HBase 记录的逻辑模型图如下:
Rowkey 作为每条记录的唯一不重复ID,ColumnFamily 包含一些 Columns,Column 的值有自己版本(版本默认是时间戳)

Logical Row

物理模型

每一个 Column 的值以 Key-Value 的形式作为一条记录存储,参考 HFile v1 的数据结构:

Physical Row

以下部分是固定长度:KeyLength、ValueLength、RowLength、ColumnFamilyLength、TimeStamp、KeyType
以下部分是可变长度:Row、ColumnFamily、ColumnQualifier、Value

可以看到每条记录中都会包含的与Value无关的信息是:Row、ColumnFamily、ColumnQualifier,所以在实际应用中,他们的值不宜设置的太长,会占用大量的存储空间。

已知的 HFile 中存储的是同一个 ColumnFamily 的数据,不清楚为什么把 ColumnFamily 的信息放在每一条记录中,而不是放在 HFile 中。

逻辑视图

逻辑视图参照下图,整个表按照 Rowkey 的字典序排列
逻辑视图类似传统数据库的表,按照 ColumnFamily 垂直切分(CF管理不同的 Column),按照 Region 水平切分(Region 管理一段连续的 Rowkey)

Logical Table

物理视图

在物理存储上,参考前面的物理模型,可以描绘出下图:
可以看到不同的 Column Family 存储在不同的文件中,每个逻辑单元格(cell)会对应一行数据,由 Timestamp 标记版本,每次插入、删除都会生成新的一行数据(append-only)。由于 append only 的这种特性,写的效率会比较高。
注意:每个 Rowkey 的数据可能分布在不同的 HFile 中。物理视图并不代表实际存储的格式,实际存储中还有很多 meta 和 index 等信息。

Physical Table


Tags:

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注