一。流程圖
二。原理
再來看這三種型別pool的特點:
poolfeatures適用
resuable
重用池,內部利用乙個queue,在close放到tail,get時取頭部
一般情況都可以,避免因不同執行緒使用不同數量htable造成過載。
threadlocal
執行緒本地池,就是乙個執行緒只出來乙個htable
如果明確有些執行緒使用htables多,其它少
roundrobin
輪轉,內部使用乙個按maxsize arry,每次get時根據計數返回對應htable
由於這方式需要在使用前必須例項化maxsize物件,現在已經在94.2中沒有使用
n/a
再之,如果在建立htablepool時使用不變的configuration,那麼最終所有的htable共享hconnection,因為建立connection是依據config所zk,hbase master等資訊建立的。所以如果不是在cross cluster情況下不建議使用multi config。由於hconnection中也存在乙個zkclient,所以如果只有乙個hconnection也意味著共享了zk client。
所以在通常情況下,若干個rowkeys進行訪問時,出現thread:rs = m:n,如果所有rows在同一rs下,那麼將出現n=1,即會阻塞訪問。
剛開始使用時不清楚此機制,所以我們一直自己建立threadpool來併發訪問,看來這是沒必要的。#1
在htablepool#gettable()時,返回了乙個封裝了htable的pooledtable,目的是為了可以在close()時可以進行干預:供poolmap post process。以便進行回推還是按照maxsize直接拋棄。而對pooledhtable的使用時,直接使用組合方式(內嵌)的htable,所以對客戶端而言是透明的。
htable內在threadpool,所以在進行訪問時相同rs的會直接打包到乙個caller下便於直接訪問。所以如果同一次訪問的rowkyes很大而且剛好命中在同一rs,那麼使用#1處理方式很有必要。
由於使用htablepool建立的htable預設是autoflush=true,所以在執行過程中沒有必要立即呼叫flushcommits(),因為在close()時會預設執行了。另外如果對資料沒有嚴格的安全要求,也可以不必總呼叫close()來結束操作,可以在系統完畢後再利用乙個shutdown hook即可。這樣對提高整體入庫速度是有提高的。
怎樣保證pool是執行緒安全?除了threadlocal外,resulablepool已經extends了concurrentlinkedqueue;roundrobin extends copyonwritearraylist,故在二者上的操作其實基本上是直接訪問parent的methods,所以是安全的.
ref:
hbase htablepool學習-2
htablepool的實現分析
[hbase] htable && htablepool
kvo實現原理 KVC KVO實現原理
一 kvc運用了乙個isa swizzling技術。isa swizzling就是型別混合指標機制。kvc主要通過isa swizzling,來實現其內部查詢定位的。isa指標,如其名稱所指,就是is a kind of的意思 指向維護分發表的物件的類。該分發表實際上包含了指向實現類中的方法的指標,...
實現原理 Vuex的實現原理
你知道vuex如何工作的嗎?先來看下圖了解下 了解圖之後看來下 的實現原理吧 let vue class store this.mutations this.actions this.vm new vue const options if getters if mutations if action...
遙感原理與應用總結 第一章 遙感原理的基本概念
第一章 遙感原理的基本概念 第二章 遙感平台及執行特點 第三章 遙感感測器及成像原理 第四章 遙感影象數字處理 第五章 遙感影象幾何處理 第六章 遙感影象輻射處理 第七章 遙感影象判讀 第八章 遙感影象自動識別分類 遙感 遙感即遙遠感知,是在不直接接觸的情況下,對目標或自然現象遠距離探測和感知的一種...