CentOS 上 HBase 数据模型设计要点
一 核心概念与约束
二 设计流程与步骤
三 常见数据模型模式
| 场景 | RowKey 设计要点 | 列族与列设计 | 主要优化点 |
|---|---|---|---|
| 时序/日志(按设备/传感器) | 设备ID + 反转时间戳(或哈希打散前缀) | 将元数据与时序指标分列族;指标列按时间动态追加 | 反转时间戳利于最近数据 Scan;合理 TTL;启用压缩与 BlockCache |
| 用户画像/宽表 | 用户ID 或 租户ID:用户ID | 少量列族(如 base、stats、tags);列限定符按业务动态扩展 | 列族少而精;热点用哈希前缀;必要时二级索引 |
| 订单/交易(按客户/时间) | 客户ID + 日期(yyyyMMdd)或 反转订单时间 | 订单头与订单项可分列族;状态/明细按列动态写入 | 前缀支持客户维度范围查询;预分区按日期/客户分布 |
| 搜索/倒排索引(协处理器或二级索引) | 词项 + 文档ID(或 DocID 哈希) | 倒排列族(term -> docIDs);正排列族(doc -> fields) | 结合协处理器/Phoenix 构建二级索引;控制列族数量与块大小 |
四 建模反模式与规避
五 落地示例与运维要点
create 'user_ts',
{NAME => 'meta', COMPRESSION => 'SNAPPY', VERSIONS => 3, TTL => 63072000}, -- 2年
{NAME => 'metrics', COMPRESSION => 'SNAPPY', VERSIONS => 1, TTL => 2592000} -- 30天
# 预分区:按十六进制前缀生成 16 个 Region(示例)
create 'user_ts',
{NAME => 'meta', COMPRESSION => 'SNAPPY', VERSIONS => 3, TTL => 63072000},
{NAME => 'metrics', COMPRESSION => 'SNAPPY', VERSIONS => 1, TTL => 2592000},
{NUMREGIONS => 16, SPLITALGO => 'HexStringSplit'}