菜单
本页目录

Hbase逻辑模型

逻辑模型顺序:表(Table) -> 行(Row) -> 行键(Row Key) -> 列族 (Column Family) -> 列 (Column) -> 单元格 (Cell) <- 时间戳 (Timestamp)

1. 表(Table)

  • HBase 中的数据以表的形式存储。每个表由多个行组成 ,即数据行的集合,但表结构简单,仅需定义表名和列族。
  • 表(Table)特点:
    1. 稀疏性:未使用的列不会占用存储空间
    2. 可伸缩性:通过分区的方式存储和管理数据,可以水平扩展来支持数十亿行和数百列的数据。
    3. 高效的随机访问:行键索引和分布式存储机制使得 HBase 在大规模数据中仍然能支持高效的随机访问。
      • 高效的随机访问并不是一直有效的,这个和RowKey的设计有关,如果RowKey是无序且没有意义的,这会导致Get无法通过RowKey去获取到对应的数据,高效的随机访问在此时便不成立了
    4. 列式存储:在物理模型中Table最终会被列切分为Store存储

2. 行键(Row Key)和行(Row)

  1. 行键(Row Key)
  • 行键是 HBase 中每行数据的唯一标识符,相当于关系数据库中的主键。

    • 在物理底层Row Key无法唯一标识一行数据 , 列限定符有一个version , 即一个Row Key下的数据其实是有多个版本的 ,Hbase默认获取时间戳最大的 , 真正能唯一标识的应该是Row Key + Timestamp
  • 行键特点:

    • 唯一性:每个行键在一个表中是唯一的。通过行键可以唯一标识和定位行数据。
    • 排序性:HBase 表的行按行键的字典顺序排序存储,这意味着行键的设计会直接影响数据的物理存储位置。可以利用这一特性,通过行键的设计来提高查询性能。
    • 不可更改:在 HBase 中,一旦行键设置好,就不能更改或删除它。HBase 是追加写入的系统,因此删除行键只能通过标记删除来实现,数据仍然保留在底层,直到系统进行垃圾回收。
  1. 行(Row)
  • 行是 HBase 中的一个逻辑数据单元,它由一个行键和多个列族组成。
  • 行特点:
    • 稀疏性:行之间可以没有固定的列,即不同行可以拥有不同的列,HBase 会自动忽略空的单元格。
    • 多版本控制:行中的每个列都可以存储多个版本的数据,通过时间戳来标识。默认情况下,HBase 会保留最新的 3 个版本。
    • 高效随机访问:由于行键的排序和唯一性,HBase 可以高效地定位到特定的行,从而实现快速的随机读取和写入。
  • 行结构:
    • 表达一:行键 + 列族(Column Family) + 列限定符(Column Qualifier) + 时间戳(Timestamp) + 类型
    • 表达二:多个Cell(单元格)组成的集合

3. 列族 (Column Family)