閱讀981 返回首頁    go 汽車大全


Hbase行健設計原則

--原理
Hbase是一個分布式的 麵相列的數據庫,他和一般關係型數據庫最大的區別是:HBase很合適與存儲非結構化的數據,還有就是它基於列的而不是基於行的模式.
既然HBase是采用KeyValue的列存儲,那麼RowKey就是KeyValue的key了,表示唯一一行,RowKey也是一段二進製碼流,最大長度為64KB內容可以由使用的用戶自定義,數據加載時,一百也是根據RowKey的二進製序由小到大的進行.
HBase是根據RowKey來進行檢索的,係統通過找到某個RowKey所在的Region然後將查詢數據的請求路由到該Region獲取數據,HBase的檢所支持3種方式.
(1)通過單個RowKey訪問,即按照某個RowKey鍵值進行get操作,這樣獲取唯一一條記錄.
(2)通過RowKey的range進行scan ,即通過設置startRowKey和endRowKey,在這個範圍內進行掃描.
(3)全表掃描.即直接掃描整張表中所有行記錄.
HBASE按單個RowKey檢索的效率是很高的,耗時在1毫秒以下,每秒中可獲取1000~2000條記錄,不過非key列的查詢很慢.
分類
RowKey長度原則
RowKey是一個二進製碼流,RowKey的長度被很多開發者建議設計在10~100個字節,不過建議越多越好,不要超過16個字節.
原因如下:
(1)數據的持久化文件HFile中是按照KeyValue存儲的,如果RowKey過長比如100個字節,1000萬列數據光RowKey就要占10萬億個字節,將近1G數據,這回極大影響Hfie的存儲效率
(2)MenStore將緩存部分數據到內存,如果RowKey字段過長內存的有效利用率會降低,係統將無法緩存更多的數據,這會降低檢索效率,因此RowKey的字節長度越短越好.
(3)目前操作係統都是64位係統,內存8字節對齊,控製在16字節

RowKey散列原則
如果RowKey是按時間戳的方式遞增,不要講時間放在二進製碼的前麵,建議將RowKey的高位作為散列字段,由程序循環生成,地位放時間字段,這樣將提升數據均衡分布在每個RegionServer實現負載均衡的幾率,如果沒有散列字段,首字段直接是時間信息將產生所有新數據都在一個RegionServer上堆積的熱點現象,這樣在做數據檢索的時候負載將會集中在個別RegionServer 降低查詢效率.

1.隨機數
2.UUID
3.MD5,Hash,等加密算法
4.業務有序數反向

RowKey唯一原則
必須在設計上保證其唯一性
RowKey是hashBase裏麵唯一的索引,對於某些查詢頻繁的限定條件數據需要把內容放在rowkey裏麵

最後更新:2017-11-04 22:03:41

  上一篇:go  SqlServer 表分區信息
  下一篇:go  phoenix