高表
高表
高表(high table),是HBase模型設計中與寬表對應的一種設計模式。
目錄
寬表:一行中包含很多列。
高表:一種新模式,每一行代表一個關係。
舉個栗子來說:
現在應業務需要在HBase中要設計一張表來存儲這樣的關係(關注-被關注),那麼使用寬表設計如下:
高表
由於follows列族已經定義,而列限定符可以動態添加,所以“張三”想要關注新的成員的時候,就只要在列族“follows”里增加列即可,在這裡使用“1”作為單元值。取消關注時,就將這一列刪除。
HBase模式的簡單和靈活允許你做出這種優化。
而使用高表設計則是這樣的:
高表
1.使用短的的列族和列限定符,可以減少網路IO,因為KeyValue對象變小了。試想寬表設計時,如果某個人關注了1W個用戶,那麼在獲取他的關注列表時會有網路問題的。
2.MD5后的rowkey,可以使數據均勻分佈在region上,避免了熱點問題
3.rowkey的長度統一,方便預測讀寫性能,同時更加容易掃描計算起始和停止鍵
總地來說,就是高表可以大大提升讀數據的性能。
人有悲歡離合,月有陰晴圓缺,凡事都有其不足,高表設計帶來的缺點:破壞了原子性原則。在上面的栗子中,因為應用不需要原子性,所以是可行的。但是其他使用場景可能需要這種原子性,那時寬表更合適。