布隆過濾器

2022-09-29 15:30:17 字數 2098 閱讀 7309

1、布隆過濾器的介紹

bloom filter(布隆過濾器)

(1)它實際上是乙個很長的二進位制向量(位元組陣列)和一系列隨機對映函式。

(2)布隆過濾器可以用於檢索乙個元素是否在乙個集合中。

(3)它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。

在電腦科學中,我們常常會碰到時間換空間或者空間換時間的情況,即為了達到某乙個方面的最優而犧牲另乙個方面。

bloom filter在時間空間這兩個因素之外又引入了另乙個因素:錯誤率。

在使用bloom filter判斷乙個元素是否屬於某個集合時,會有一定的錯誤率。

也就是說,有可能把不屬於這個集合的元素誤認為屬於這個集合(false positive),但不會把屬於這個集合的元素誤認為不屬於這個集合(false negative)。

在增加了錯誤率這個因素之後,bloom filter通過允許少量的錯誤來節省大量的儲存空間。

它的用法其實是很容易理解的,我們拿個hbase中應用的例子來說下,我們已經知道rowkey存放在hfile中,

那麼為了從一系列的hfile中查詢某個rowkey,我們就可以通過 bloom filter 快速判斷 rowkey 是否在這個hfile中,

從而過濾掉大部分的hfile,減少需要掃瞄的block。

2、布隆過濾器的原理

bloomfilter對於hbase的隨機讀效能至關重要,對於get操作以及部分scan操作可以剔除掉不會用到的hfile檔案,減少實際io次數,提高隨機讀效能。在此簡單地介紹一下bloom filter的工作原理,bloom filter使用位陣列來實現過濾,初始狀態下位陣列每一位都為0,如下圖所示:

假如此時有乙個集合s = ,bloom filter使用k個獨立的hash函式,分別將集合中的每乙個元素對映到{1,…,m}的範圍(這裡的m是上面byte的長度,這個對映的過程就相當於hash取餘)。對於任何乙個元素,被對映到的數字作為對應的位陣列的索引,該位會被置為1。比如元素x1被hash函式對映到數字8,那麼位陣列的第8位就會被置為1。下圖中集合s只有兩個元素x和y,分別被3個hash函式進行對映,對映到的位置分別為(0,3,6)和(4,7,10),對應的位會被置為1:

現在假如要判斷另乙個元素是否是在此集合中,只需要被這3個hash函式進行對映,檢視對應的位置是否有0存在,如果有的話,表示此元素肯定不存在於這個集合,否則有可能存在。下圖所示就表示z肯定不在集合{x,y}中:

從上面的內容我們可以得知,bloom filter有兩個很重要的引數

雜湊函式個數

位陣列的大小

3、bloom filter 在hbase中的應用

bloom block -其實就是- 二進位制位元組陣列

load-on-open-section(regionserver啟動時載入到記憶體):bloomfilter meta block、bloom index block

hbase中每個hfile都有對應的位陣列,keyvalue在寫入hfile時會先經過幾個hash函式的對映,對映後將對應的陣列位改為1,get請求進來之後再進行hash對映,如果在對應陣列位上存在0,說明該get請求查詢的資料不在該hfile中。

hfile中的bloom block中儲存的就是上面說得位陣列,當hfile很大時,data block 就會很多,同時keyvalue也會很多,需要對映入位陣列的rowkey也會很多,所以為了保證準確率,位陣列就會相應越大,那bloom block也會越大,為了解決這個問題就出現了bloom index block,乙個hfile中有多個bloom block(位陣列),根據rowkey拆分,一部分連續的key使用乙個位陣列。這樣查詢rowkey就要先經過bloom index block(在記憶體中)定位到bloom block,再把bloom block載入到記憶體,進行過濾。

布隆過濾器

布隆過濾器 bloom filter 是1970年由布隆提出的。它實際上是乙個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索乙個元素是否在乙個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。如果想要判斷乙個元素是不是在乙個集合裡,一般想到...

布隆過濾器

布隆過濾器的概念 如果想要判斷乙個元素是不是在乙個集合裡,一般想到的是將所有元素儲存起來,然後通過比較確定。鍊錶,樹等等資料結構都是這種思路.但是隨著集合中元素的增加,我們需要的儲存空間越來越大,檢索速度也越來越慢 o n o logn 不過世界上還有一種叫作雜湊表 又叫 雜湊表,hash tabl...

布隆過濾器

如果想判斷乙個元素是不是在乙個集合裡,一般想到的是將集合中所有元素儲存起來,然後通過比較確定。鍊錶 樹 雜湊表 又叫雜湊表,hash table 等等資料結構都是這種思路。但是隨著集合中元素的增加,我們需要的儲存空間越來越大。同時檢索速度也越來越慢。bloom filter 是一種空間效率很高的隨機...