菜单
本页目录

HBase 数据模型

HBase 的数据模型基于面向列的存储架构,采用行键(RowKey)、列族(Column Family)、列限定符(Column Qualifier)和时间戳的层次结构。

  • 行键(RowKey):唯一标识表中的一行数据,所有行根据行键的字典顺序进行存储。

    RowKey 类似于 MySQL 中的 Primary Key,但在 HBase 中更为重要。每行数据必须包含一个 RowKey。

  • 列族(Column Family):将表中的数据列进行逻辑分组。每个列族包含若干个列限定符,列族在创建表时定义,不能轻易更改。

  • 列限定符(Column Qualifier):每个列族包含多个列限定符,可以动态添加,列限定符与列族一起确定具体的数据单元。

  • 单元格(Cell):由行键、列族和列限定符共同确定的最小存储单元。

  • 时间戳(Timestamp):HBase 中的每个单元格可以保存同一数据的多个版本,版本通过时间戳区分。

    在 HBase 中,数据存储在具有行和列的表中。虽然看起来类似于关系数据库 (RDBMS),但将 HBase 表视为多维 Map 结构更容易理解。

HBase 存储模型表格示例

下表展示了一个 HBase 表的结构:

RowKeyColumn Family: personalColumn Family: contact
nameage
user123John Doe30
user456Jane Doe25
  • RowKey:唯一标识每一行用户数据。
  • Column Familypersonalcontact,分别存储个人信息和联系方式。
  • 列限定符nameageemailphone,表示具体的数据项。
  • 单元格:例如,行键为 user123、列族为 personal、列限定符为 name 的单元格存储值 John Doe
  • 时间戳:每个单元格可以有多个版本,但在表格中仅展示最新版本。

数据存储示例

在 HBase 中,数据的存储可以看作是一个多维度的映射结构,如下所示:

RowKey: user123
  Column Family: personal
    name: John Doe (Timestamp: 1696886600)
    age: 30 (Timestamp: 1696886600)
  Column Family: contact
    email: john@abc.com (Timestamp: 1696886600)
    phone: 123-456-7890 (Timestamp: 1696886600)

RowKey: user456
  Column Family: personal
    name: Jane Doe (Timestamp: 1696886600)
    age: 25 (Timestamp: 1696886600)
  Column Family: contact
    email: jane@xyz.com (Timestamp: 1696886600)
    phone: 098-765-4321 (Timestamp: 1696886600)

在这个示例中,每个单元格都有一个时间戳,用于区分不同版本的数据。当更新数据时,新的版本会有不同的时间戳,以保留历史数据。

专业术语

1. 表(Table)

  • HBase 中的数据以表的形式组织。
  • 表由多个行组成。

2. 行(Row)

  • HBase 中的行由一个行键(RowKey)和一个或多个列组成。
  • 行按行键的字典顺序存储。
  • 行键的设计非常重要,应尽量使相关的行存储在一起。
    • 例如,存储网站域名时,可以将域名反转后存储(如 org.apache.www、org.apache.mail)。这样可以将所有 Apache 域存储在一起,而不是根据子域的第一个字母展开。

3. 列(Column)

  • HBase 中的列由列族(Column Family)和列限定符(Column Qualifier)组成。
  • 列的表示形式为 列族名:列限定符名,例如 C1:USER_ID

4. 列族(Column Family)

列族是对一组相关列及其值的逻辑分组,用于优化性能。

  • 存储属性:每个列族有一组存储属性,例如是否应缓存在内存中、数据如何压缩以及行键如何编码。
  • 相同结构:表中的每一行都有相同的列族结构,但各行在具体列中的数据可能不同。
  • 数据存储:所有列族的数据存储在同一位置(文件系统 HDFS)。
  • 建议:HBase 官方建议保持列族中的列一致,并将同类数据放在同一个列族中,以便于数据管理和访问。

5. 列限定符(Column Qualifier)

  • 列族中包含多个列限定符,为存储的数据提供索引。
  • 列族在创建表时是固定的,但列限定符没有限制,可以动态添加。
  • 不同的行可能包含不同的列限定符。

6. 单元格(Cell)

  • 单元格是行、列族和列限定符的组合。
  • 包含一个值和一个时间戳(表示该值的版本)。
  • 单元格中的内容是以二进制存储的。

概念模型

在以下概念模型中,示例表具有两行和三个列族(contents、anchor、people),并展示了数据的多个版本:

Row KeyTime StampColumn Family: contentsColumn Family: anchorColumn Family: people
"com.cnn.www"t9 anchor:cssnsi.com = "CNN"
"com.cnn.www"t8 anchor:my.look.ca = "CNN.com"
"com.cnn.www"t6contents:html = "..."
  • RowKey:com.cnn.www:唯一标识该行。
  • Column Family: anchor:存储链接,包含 anchor:cssnsi.comanchor:my.look.ca
  • Column Family: contents:存储网页内容,包含 contents:html
  • Time Stampcom.cnn.www 在 HBase 中有多个版本的数据(例如 t3、t5、t6、t8、t9),每个版本表示数据在不同时间点的状态。