在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
存儲設備信息,通過列限定符動態擴展屬性。
參考來源: