HBase之BloomFilter
HBase的Get/Scan操作流程
?
hbase中有BloomFilter的功能,可以在有些情況下過(guò)濾掉不需要的hfile,節(jié)省IO。
BloomFilter作用
BloomFilter在HBase中的作用??
HBase**利用BloomFilter來(lái)提高隨機(jī)讀**(Get)的性能,對(duì)于順序(Scan)而言,設(shè)置Bloomfilter是沒(méi)有作用的(0.92以后,如果設(shè)置了bloomfilter為ROWCOL,對(duì)于指定了qualiter的Scan有一定的優(yōu)化)。
BloomFilter在HBase中的開(kāi)銷(xiāo)??
BloomFilter是一個(gè)列族(of)級(jí)別的配置屬性,如果在表中設(shè)置了BloomFilter,那么HBase會(huì)在生成StoreFile時(shí),包含一份BloomFilter?
結(jié)構(gòu)的數(shù)據(jù),稱(chēng)其為MetaBlock;MetaBlock與DataBlock(真實(shí)的KeyValue數(shù)據(jù))一起由LRUBlockCache維護(hù),所以開(kāi)啟BloomFilter會(huì)有一定的存儲(chǔ)及內(nèi)存cache開(kāi)銷(xiāo)。
HBase中的Bloomfilter的類(lèi)型及使用
ROW:根據(jù)KeyValue中的row來(lái)過(guò)濾storefile。?
舉例:假設(shè)有2個(gè)storefile文件sf1和sf2,?
sf1包含kv1(r1 cf:q1 v)、kv2(r2 cf:q1 v)?
sf2包含kv3(r3 cf:q1 v)、kv4(r4 cf:q1 v)
如果設(shè)置了CF屬性中的bloomfilter為ROW,那么get(r1)時(shí)就會(huì)過(guò)濾sf1,get(r3)就會(huì)過(guò)濾sf2
ROWCOL:根據(jù)KeyValue中的row+qualifier來(lái)過(guò)濾storefile。?
舉例:假設(shè)有2個(gè)storefile文件sf1和sf2,?
sf1包含kv1(r1 cf:q1 v)、kv2(r2 cf:q1 v)?
sf2包含kv3(r1 cf:q2 v)、kv4(r2 cf:q2 v)
如果設(shè)置了CF屬性中的bloomfilter為ROW,?
無(wú)論get(r1,q1)還是get(r1,q2),都會(huì)讀取sf1+sf2;?
而如果設(shè)置了CF屬性中的bloomfilter為ROWCOL,那么get(r1,q1)就會(huì)過(guò)濾sf2,get(r1,q2)就會(huì)過(guò)濾sf1
ROWCOL一定比ROW效果好么?
答案:不一定?
a、ROWCOL只對(duì)指定列(Qualifier)的隨機(jī)讀(Get)有效,如果應(yīng)用中的隨機(jī)讀get,只含row,而沒(méi)有指定讀哪個(gè)qualifier,那么設(shè)置ROWCOL是沒(méi)有效果的,這種場(chǎng)景就應(yīng)該使用ROW。?
b、如果隨機(jī)讀中指定的列(Qualifier)的數(shù)目大于等于2,在0.90版本中ROWCOL是無(wú)效的,而在0.92版本以后,HBASE-2794對(duì)這一情景作了優(yōu)化,是有效的(通過(guò)KeyValueScanner#seekExactly)?
c、如果同一row多個(gè)列的數(shù)據(jù)在應(yīng)用上是同一時(shí)間put的,那么ROW與ROWCOL的效果近似相同,而ROWCOL**只對(duì)指定了列**的隨機(jī)讀才會(huì)有效,所以設(shè)置為ROW更佳。
注意:?
ROWCOL與ROW只在名稱(chēng)上有聯(lián)系,ROWCOL并不是ROW的擴(kuò)展,不能取代ROW。?
region下的storefile數(shù)目越多,bloomfilter的效果越好。region下的storefile數(shù)目越少,HBase讀性能越好。
總結(jié)
以上是生活随笔為你收集整理的HBase之BloomFilter的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Hbase 高级特性Bloom filt
- 下一篇: java并发包系列---LockSupp