簡單的HBase Client端實現

2021-06-27 22:57:33 字數 1251 閱讀 9828

newbie剛接觸hbase,遇到幾個初學者常見的關於hbase問題,這裡就問題就不多做介紹,主要還是編碼優化問題,下面專門介紹以下幾點,希望對於初學者有所幫助。

基於hbase-0.94.x 版本

hbase的無論什麼操作都是對rowkey進行掃瞄操作的,rowkey的排序是按照字典序來排的。

為讀優化

設計行健時,盡量把行健按照序號緊挨一起,減少掃瞄。

為寫優化

主要是考慮所有的rowkey不要寫到同乙個region上,這樣會導致其他機器很空閒,只有這個region的吞吐量就是你應用的吞吐量

例如時間戳做行健就會出現這個問題。

解決方法主要是兩個:

雜湊,建表時分表,然後寫入時使用雜湊函式,將行健打散分布,這樣做只是為了寫操作多的優化,對於讀來說,可能是災難(全表掃瞄)

salting,使用隨機值做字首,解決雜湊全表掃瞄的問題

因為hbase對於每乙個命令(put,delete,get,increment)都是起乙個執行緒來做的,每個命令基本都有

addfamily(), addcloumns()方法可以使用

這裡漏掉一點是為什麼要merge:因為hbase對於每乙個命令都是起乙個thread來執行(0.94),所以為了減少thread的建立,所以盡量merge

這裡有人會問,merge之後的執行效能和merge之前的效能如何,會快還是慢??其實效能相差無幾,具體可以去**量子恆道blog(貌似打不開)上去看看測試結果

這一點是不需要的,hbase本身有cache機制的,主要在hconnectionmanager裡面做管理,它會做快取。每次close時也會檢查該cacheinstance是否還有reference,如果有就暫時不close,沒有就close,reference-1。詳細請看hconnectionmanager原始碼;

public static hconnection getconnection(final configuration conf)

throws ioexception else if (connection.isclosed())

connection.inccount();

return connection;

}}

可以看下這篇文章: 

我自己實現了乙個簡單的hbase client,不是執行緒安全,在github上,可以clone下參考,僅供參考(為經測試,可能存在錯誤)

******-hbase-client: git clone 

移動端簡單適配

rem 單位換算 定為 75px 只是方便運算,750px 75px 640 64px 1080px 108px,如此類推 vw fontsize 75 iphone 6尺寸的根元素大小基準值 function rem px 根元素大小使用 vw 單位 vw design 750 html medi...

簡單服務端和客戶端的開發

在程式設計之前我安裝了一些軟體工具包,其中包括vc2005 gsoap flash builder 4.5等等,我利用vc2005開發服務端,fb來開發客戶端,當然我對於這些工具以及環境還不是很熟悉,也是第一次來動手寫關於這方面的,現在對於其中一些原理有了大概的了解了。我首先動手寫的是服務端,關於服...

簡單的python socket服務端 客戶端例子

服務端 usr bin python3 import socket socket模組 import subprocess 執行系統命令模組 host 127.0.0.1 port 50007 s socket.socket socket.af inet,socket.sock stream 定義so...