Hbase 設計原則
hbase 所謂的三維有序儲存的三維是指:rowkey(行主鍵),column key(columnFamily+qualifier),timestamp(時間戳)三部分組成的三維有序儲存。
rowkey是行的主鍵,而且hbase只能用個rowkey,或者一個rowkey範圍即scan來查詢資料。所以 rowkey的設計是至關重要的,關係到你 應用層 的查詢效率。
必須在設計上保證其唯一性。 由於在HBase中資料儲存是Key-Value形式,若HBase中同一表插入相同Rowkey,則原先的資料會被覆蓋掉(如果表的version設定為1的話),所以務必保證Rowkey的唯一性.
HBase的Rowkey是按照ASCII有序設計的,我們在設計Rowkey時要充分利用這點。
3.Rowkey的雜湊原則
我們設計的Rowkey應均勻的分佈在各個HBase節點上。
拿常見的時間戳舉例,假如Rowkey是按系統時間戳的方式遞增,Rowkey的第一部分如果是時間戳資訊的話將造成所有新資料都在一個RegionServer上堆積的熱點現象,也就是通常說的Region熱點問題, 熱點發生在大量的client直接訪問集中在個別RegionServer上(訪問可能是讀,寫或者其他操作),導致單個RegionServer機器自身負載過高,引起效能下降甚至Region不可用,常見的是發生jvm full gc或者顯示region too busy異常情
況,當然這也會影響同一個RegionServer上的其他Region。
1、Reverse反轉
針對固定長度的Rowkey反轉後儲存,這樣可以使Rowkey中經常改變的部分放在最前面,可以有效的隨機Rowkey。
2、Salt加鹽
比如在一個有4個Region(注:以 [ ,a)、[a,b)、[b,c)、[c, )為Region起至)的HBase表中,
加Salt前的Rowkey:abc001、abc002、abc003
我們分別加上a、b、c字首,加Salt後Rowkey為:a-abc001、b-abc002、c-abc003
可以看到,加鹽前的Rowkey預設會在第2個region中,加鹽後的Rowkey資料會分佈在3個region中,
理論上處理後的吞吐量應是之前的3倍。由於字首是隨機的,讀這些資料時需要耗費更多的時間,所以Salt增加了寫操作的吞吐量。
3、Hash雜湊或者Mod
用Hash雜湊來替代隨機Salt字首的好處是能讓一個給定的行有相同的字首,這在分散了Region負載的同時,使讀操作也能夠推斷。確定性Hash(比如md5後取前4位做字首)能讓客戶端重建完整RowKey,可以使用get操作直接get想要的行。
Rowkey長度設計原則:Rowkey是一個二進位制,Rowkey的長度被很多開發者建議說設計在10~100個位元組,建議是越短越好。
原因有兩點:
其一是HBase的持久化檔案HFile是按照KeyValue儲存的,如果Rowkey過長比如500個位元組,1000萬列資料光Rowkey就要佔用500*1000萬=50億個位元組,將近1G資料,這會極大影響HFile的儲存效率;
其二是MemStore快取部分資料到記憶體,如果Rowkey欄位過長記憶體的有效利用率會降低,系統無法快取更多的資料,這會降低檢索效率;
需要指出的是不僅Rowkey的長度是越短越好,而且列族名、列名等儘量使用短名字,因為HBase屬於列式資料庫,這些名字都是會寫入到HBase的持久化檔案HFile中去,過長的Rowkey、列族、列名都會導致整體的儲存量成倍增加。
推薦閱讀:
https://blog.csdn.net/zjjcchina/article/details/122620415
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949806/viewspace-2914330/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HBase的RowKey設計原則
- 設計原則
- 設計原則:開閉原則(OCP)
- 【設計模式】設計原則設計模式
- 設計原則 設計模式設計模式
- 設計模式 - 設計原則設計模式
- 安全設計原則
- SOLID 設計原則Solid
- URI設計原則
- 設計原則之【介面隔離原則】
- 設計原則-依賴反轉原則
- 設計原則:介面隔離原則(ISP)
- 設計模式的設計原則設計模式
- 軟體設計原則—合成複用原則
- 軟體設計原則—介面隔離原則
- 設計原則之【裡式替換原則】
- 設計原則之【單一職責原則】
- 設計原則之【開放封閉原則】
- 設計原則之【依賴反轉原則】
- 軟體設計原則
- mysql 索引設計原則MySql索引
- 元件/框架設計原則元件框架
- DDD聚合設計原則
- 設計原則總結
- 系統設計原則
- loc框架設計原則框架
- Javascript 設計模式之設計原則JavaScript設計模式
- 設計模式(06)——設計原則(1)設計模式
- 設計模式(07)——設計原則(2)設計模式
- JavaScript設計模式(一)設計原則JavaScript設計模式
- 軟體設計原則—依賴倒轉原則
- 開閉原則——物件導向程式設計原則物件程式設計
- C# 設計模式(0)——設計原則C#設計模式
- 設計模式-六大設計原則設計模式
- 設計模式 #1(7大設計原則)設計模式
- 設計模式六大設計原則設計模式
- 物件導向設計原則物件
- 安全設計原則(選做)