rowkey:行鍵
設計的三個原則
唯壹
必須在設計上保證其唯壹性。由於在HBase中數據存儲是Key-Value形式,若HBase中同壹表插入相同Rowkey,則原先的數據會被覆蓋掉(如果表的version設置為1的話),所以務必保證Rowkey的唯壹性
排序
HBase的Rowkey是按照ASCII有序設計的,我們在設計Rowkey時要充分利用這點。比如視頻網站上對影片《泰坦尼克號》的彈幕信息,這個彈幕是按照時間倒排序展示視頻裏,這個時候我們設計的Rowkey要和時間順序相關。可以使用"Long.MAX_VALUE - 彈幕發表時間"的 long 值作為 Rowkey 的前綴
散列
我們設計的Rowkey應均勻的分布在各個HBase節點上。拿常見的時間戳舉例,假如Rowkey是按系統時間戳的方式遞增,Rowkey的第壹部分如果是時間戳信息的話將造成所有新數據都在壹個RegionServer上堆積的熱點現象,也就是通常說的Region熱點問題, 熱點發生在大量的client直接訪問集中在個別RegionServer上(訪問可能是讀,寫或者其他操作),導致單個RegionServer機器自身負載過高,引起性能下降甚至Region不可用,常見的是發生jvm full gc或者顯示region too busy異常情況,當然這也會影響同壹個RegionServer上的其他Region。