3、HBase中rowkey的設計?

HBase是三維有序存儲的,經過rowkey(行鍵),column key(column family和qualifier)和TimeStamp(時間戳)這個三個維度能夠對HBase中的數據進行快速定位。緩存

HBase中rowkey能夠惟一標識一行記錄,在HBase查詢的時候,有如下幾種方式:負載均衡

  1. 經過get方式,指定rowkey獲取惟一一條記錄
  2. 經過scan方式,設置startRow和stopRow參數進行範圍匹配
  3. 全表掃描,即直接掃描整張表中全部行記錄

 

rowkey長度原則 :spa

rowkey是一個二進制碼流,能夠是任意字符串,最大長度 64kb ,實際應用中通常爲10-100bytes,以 byte[] 形式保存,通常設計成定長。操作系統

建議越短越好,不要超過16個字節,緣由以下:設計

  1. 數據的持久化文件HFile中是按照KeyValue存儲的,若是rowkey過長,好比超過100字節,1000w行數據,光rowkey就要佔用100*1000w=10億個字節,將近1G數據,這樣會極大影響HFile的存儲效率
  2. MemStore將緩存部分數據到內存,若是rowkey字段過長,內存的有效利用率就會下降,系統不能緩存更多的數據,這樣會下降檢索效率
  3. 目前操做系統都是64位系統,內存8字節對齊,控制在16個字節,8字節的整數倍利用了操做系統的最佳特性

rowkey散列原則

若是rowkey按照時間戳的方式遞增,不要將時間放在二進制碼的前面,建議將rowkey的高位做爲散列字段,由程序隨機生成,低位放時間字段,這樣將提升數據均衡分佈在每一個RegionServer,以實現負載均衡的概率。若是沒有散列字段,首字段直接是時間信息,全部的數據都會集中在一個RegionServer上,這樣在數據檢索的時候負載會集中在個別的RegionServer上,形成熱點問題,會下降查詢效率。code

rowkey惟一原則

必須在設計上保證其惟一性,rowkey是按照字典順序排序存儲的,所以,設計rowkey的時候,要充分利用這個排序的特色,將常常讀取的數據存儲到一塊,將最近可能會被訪問的數據放到一塊。排序

相關文章
相關標籤/搜索