Hbase逻辑模型
逻辑模型顺序:表(Table) -> 行(Row) -> 行键(Row Key) -> 列族 (Column Family) -> 列 (Column) -> 单元格 (Cell) <- 时间戳 (Timestamp)
1. 表(Table)
- HBase 中的数据以表的形式存储。每个表由多个行组成 ,即数据行的集合,但表结构简单,仅需定义表名和列族。
- 表(Table)特点:
- 稀疏性:未使用的列不会占用存储空间
- 可伸缩性:通过分区的方式存储和管理数据,可以水平扩展来支持数十亿行和数百列的数据。
- 高效的随机访问:行键索引和分布式存储机制使得 HBase 在大规模数据中仍然能支持高效的随机访问。
- 高效的随机访问并不是一直有效的,这个和RowKey的设计有关,如果RowKey是无序且没有意义的,这会导致Get无法通过RowKey去获取到对应的数据,高效的随机访问在此时便不成立了
- 列式存储:在物理模型中Table最终会被列切分为Store存储
2. 行键(Row Key)和行(Row)
- 行键(Row Key)
-
行键是 HBase 中每行数据的唯一标识符,相当于关系数据库中的主键。
- 在物理底层Row Key无法唯一标识一行数据 , 列限定符有一个version , 即一个Row Key下的数据其实是有多个版本的 ,Hbase默认获取时间戳最大的 , 真正能唯一标识的应该是Row Key + Timestamp
-
行键特点:
- 唯一性:每个行键在一个表中是唯一的。通过行键可以唯一标识和定位行数据。
- 排序性:HBase 表的行按行键的字典顺序排序存储,这意味着行键的设计会直接影响数据的物理存储位置。可以利用这一特性,通过行键的设计来提高查询性能。
- 不可更改:在 HBase 中,一旦行键设置好,就不能更改或删除它。HBase 是追加写入的系统,因此删除行键只能通过标记删除来实现,数据仍然保留在底层,直到系统进行垃圾回收。
- 行(Row)
- 行是 HBase 中的一个逻辑数据单元,它由一个行键和多个列族组成。
- 行特点:
- 稀疏性:行之间可以没有固定的列,即不同行可以拥有不同的列,HBase 会自动忽略空的单元格。
- 多版本控制:行中的每个列都可以存储多个版本的数据,通过时间戳来标识。默认情况下,HBase 会保留最新的 3 个版本。
- 高效随机访问:由于行键的排序和唯一性,HBase 可以高效地定位到特定的行,从而实现快速的随机读取和写入。
- 行结构:
- 表达一:行键 + 列族(Column Family) + 列限定符(Column Qualifier) + 时间戳(Timestamp) + 类型
- 表达二:多个Cell(单元格)组成的集合