hbase中RowKey的設計規則

在關心到hbase中rowkey設計的時候,說明hbase基本的知識已經了解了。就直接上干貨(如果不了解的可以參考我上面一片關于hbase的自我總結的文章,我覺得總結的還是很好的)。如果文章中有錯誤或是不規范的地方,歡迎隨時找我哈

rowkey長度原則

rowkey是一個二進制碼流,可以是任意字符串,最大長度 64kb ,實際應用中一般為10-100bytes,以 byte[] 形式保存,一般設計成定長。

建議越短越好,不要超過16個字節,原因如下:

數據的持久化文件HFile中是按照KeyValue存儲的,如果rowkey過長,比如超過100字節,1000w行數據,光rowkey就要占用100*1000w=10億個字節,將近1G數據,這樣會極大影響HFile的存儲效率;

MemStore將緩存部分數據到內存,如果rowkey字段過長,內存的有效利用率就會降低,系統不能緩存更多的數據,這樣會降低檢索效率。

目前操作系統都是64位系統,內存8字節對齊,控制在16個字節,8字節的整數倍利用了操作系統的最佳特性。

rowkey散列原則

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

rowkey唯一原則

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

其他一些建議

盡量減少行和列的大小在HBase中,value永遠和它的key一起傳輸的。當具體的值在系統間傳輸時,它的rowkey,列名,時間戳也會一起傳輸。如果你的rowkey和列名很大,甚至可以和具體的值相比較,那么你將會遇到一些有趣的問題。HBase storefiles中的索引(有助于隨機訪問)最終占據了HBase分配的大量內存,因為具體的值和它的key很大。可以增加block大小使得storefiles索引再更大的時間間隔增加,或者修改表的模式以減小rowkey和列名的大小。壓縮也有助于更大的索引。

列族盡可能越短越好,最好是一個字符

冗長的屬性名雖然可讀性好,但是更短的屬性名存儲在HBase中會更好

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • HBase那些事 @(大數據工程學院)[HBase, Hadoop, 優化, HadoopChen, hbase]...
    分癡閱讀 3,993評論 3 17
  • 本文首先簡單介紹了HBase,然后重點講述了HBase的高并發和實時處理數據 、HBase數據模型、HBase物理...
    達微閱讀 2,758評論 1 13
  • HBase存儲架構圖 HBase Master 為Region server分配region 負責Region s...
    kimibob閱讀 5,627評論 0 52
  • 參考:http://www.lxweimin.com/p/569106a3008f 最近在逐步跟進Hbase的相關...
    博弈史密斯閱讀 873評論 1 1
  • 壓力超級大的一天,今天的會議,明天讀書會,一個人都沒招到,下午場地要不要先看下布置下都是未知數,希望一切都好起來。...
    rainbow生燴閱讀 185評論 0 1