一、HBase 数据模型
·row_key:行的唯一标识,按字典序排序。
·column family:列的集合,是物理存储的基本单位。每个列族包含数量不限的列,支持动态添加。同一个列可以包含多个数据版本,版本号通常由时间戳表示。
·column:列族中的具体字段,由列族名和列限定符(Qualifier)组成。
·version:数据的版本号,通常由时间戳表示。
·value:实际存储的数据。
·cell:数据存储的最小单元,由 (row_key, column family, column, version) 唯一标识。
二、HBase 存储结构
·Namespace:表的逻辑容器,用于组织和管理表。表属于某个 Namespace。
·Table(表): HBase 中数据存储的基本单位。表按行键(Row Key)范围划分为多个 Region,每个 Region 负责存储一部分数据。
·Region(区域):每个 Region 包含多个 Store,每个 Store 对应一个列族(Column Family)。
·Store(存储单元):Store 是 Region 中存储数据的基本单位,与列族一一对应。每个 Store 维护独立的 LSM 结构,包括 MemStore 和 StoreFile。列族的数量通常有限,建议不超过3-5个。
·MemStore:MemStore 是内存中的写入缓存,提供高效的写入性能。
·StoreFile:StoreFile 是磁盘上的存储文件,基于 HFile 格式,支持高效的读取和压缩。
·Block:Block 是 StoreFile 中的基本存储单元,支持高效的随机读取。
HBase 的存储结构可以表示为以下层次关系:
Table ├── Region (按行键范围划分) │ ├── Store (每个列族对应一个 Store) │ │ ├── MemStore (内存中的写入缓存) │ │ └── StoreFile (磁盘上的存储文件) │ │ └── Block (文件中的数据块) │ └── … └── …
三、角色映射
·HBase Master 类似 TDSQL Boundless 的 MC(Metadata Cluster)。
·HBase Region Server 类似 TDSQL Boundless 的 TDStore 节点。
四、表映射规则
·一对多映射:一个 HBase Table 对应 TDSQL Boundless 的多张表。
·列族映射:每个 Column Family 对应一张 TDSQL Boundless 表,表名格式为 HBase 表名_列族名。
·列映射:HBase 每列的一个具体版本对应 TDSQL Boundless 表中的一行数据。
·主键设计:TDSQL Boundless 表的主键为 HBase Row Key + Column Qualifier + Version。
五、映射示例
假设 HBase 表 ht1 包含两个列族 cf1 和 cf2,则 TDSQL Boundless 内部会创建两张表:ht1_cf1 和 ht1_cf2。
·HBase 数据示例
| row key | column family | column | version | value |
| row1 | cf1 | a | 100 | v1 |
| row1 | cf1 | b | 100 | v2 |
| row1 | cf1 | b | 110 | v3 |
| row1 | cf2 | c | 120 | v4 |
| row2 | cf1 | d | 120 | v5 |
| row2 | cf2 | d | 130 | v6 |
·TDSQL Boundless 表数据
create table ht1_cf1 ( K varbinary(1024), Q varbinary(256), T bigint, V MediumBlob NOT NULL, primary key(K, Q, T)) HBase; create table ht1_cf2 ( K varbinary(1024), Q varbinary(256), T bigint, V MediumBlob NOT NULL, primary key(K, Q, T)) HBase;
·表 ht1_cf1
| Primary Key (K + Q + T) | Value (V) |
| row1 + a + 100 | v1 |
| row1 + b + 100 | v2 |
| row1 + b + 110 | v3 |
| row2 + d + 120 | v5 |
·表 ht1_cf2
| Primary Key (K + Q + T) | Value (V) |
| row1 + c + 120 | v4 |
| row2 + d + 130 | v6 |