Hbase中的BloomFilter(布隆過濾器)


(1)     Bloomfilter在hbase中的作用

    Hbase利用bloomfilter來提高隨機讀(get)的性能,對於順序讀(scan)而言,設置Bloomfilter是沒有作用的(0.92版本以后,如果設置了bloomfilter為rowcol,對於執行了qualifier的scan有    一定的優化)

(2)     Bloomfilter在hbase中的開銷

    Bloomfilter是一個列族(cf)級別的配置屬性,如果在表中設置了bloomfilter,那么hbase會在生成storefile時包含一份bloomfilter結構的數據,稱其為MetaBlock與DataBlock(真實的KeyValue    數據)一起由LRUBlockCache維護。所以開啟bloomfilter會有一定的存儲及內存cache開銷。

(3)     Hbase中的bloomfilter的類型及使用

    a)  ROW,根據KeyValue中的row來過濾storefile。舉例:(該情況可以針對列族和列都相同,只有rowkey不同的情況下,可以使用ROW來過濾。)

        如:假設有2個storfile文件sf1和sf2,

        sf1包含kv1(r1  cf:q1  v) 、kv2(r2  cf:q1  v)

        sf2包含kv3(r3  cf:q2  v) 、kv4(r4  cf:q2  v)

        如果設置了cf屬性的bloomfilter為ROW,那么get(r1)時會過濾sf2,get(r3)時會過濾sf1.

    b)  ROWCOL,根據KeyValue中的row+qualifier來過濾storefile。舉例:(該情況是針對列族相同,列和rowkey不同的情況,可以用ROWCOL來過濾。)

        如:假設有2個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)

        如果設置了cf屬性中的bloomfilter為ROW,無論get(r1,q1)還是get(r1,q2)都會讀取sf1+sf2;而如果設置了cf屬性中的bloomfilter為ROWCOL,那么get(r1,q1)就會過濾         sf2,get(r1,q2)就會過濾sf1。

(4)ROWCOL與ROW對比

           i. ROWCOL只對指定列(Qualifier)的隨機讀取Get有效,如果應用中的隨機讀取Get只含有row,而且沒有指定讀取哪個qualifier,那么設置ROWCOL是沒有效果的,這種場景就應該使用ROW。

           ii.   如果隨機讀中指定的列(Qualifier)的數目大於等於2,在0.9版本中ROWCOL是無效的,0.9版本以后是有效的。

           iii.  如果同一個row多個列的數據在應用上是同一時間put的,那么ROW與ROWCOL的效果近似相同,而ROWCOL只對指定了列的隨機讀才會有效,所以設置為ROW更佳。

           iv.  ROWCOL與ROW只在名稱上有聯系,ROWCOL並不是ROW的擴展,不能取代ROW。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM