在CentOS上设计HBase数据模型需遵循以下原则:
- 行键(Row Key)设计
- 唯一性:确保每行数据唯一标识。
- 避免热点:使用散列(如MD5)或反转时间戳(如
deviceID_<Long.MAX_VALUE-timestamp>)均匀分布数据。
- 考虑查询模式:将常用查询字段前置,提升扫描效率。
- 列族(Column Family)设计
- 控制数量:建议不超过3-4个,减少I/O开销。
- 逻辑分组:将关联数据存入同一列族,避免跨列族查询。
- 压缩与TTL:对冷数据启用压缩(如Snappy),设置合理过期时间。
- 数据存储优化
- 预分区:创建表时预先划分Region,避免数据倾斜。
- 层次扁平化:避免深层嵌套,保持数据结构简单。
- 性能调优参数
- 调整Block Cache:读多写少场景增大缓存占比(如40%堆内存)。
- 启用Bloom Filter:减少非必要磁盘读取。
- 合理设置MemStore:根据写入量调整
hbase.hregion.memstore.flush.size。
示例场景:
- 时序数据(如监控日志):
- 行键:
设备ID_<反转时间戳>(如sensor001_<Long.MAX_VALUE-1680340800>),支持按时间范围高效扫描。
- 列族:单列族
metrics,存储温度、湿度等指标,启用TTL(如30天)。
- 用户行为数据:
- 行键:
用户ID_<时间戳>,配合二级索引(如Phoenix)实现多维度查询。
- 列族:
cf1存储行为类型,cf2存储设备信息,通过列限定符动态扩展属性。
参考来源: