布隆過濾器原理
布隆過濾器(bloom filter)是2023年由布隆提出的。它實際上是乙個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索乙個元素是否在乙個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。
如果想判斷乙個元素是不是在乙個集合裡,一般想到的是將集合中所有元素儲存起來,然後通過比較確定。鍊錶、樹、雜湊表(又叫雜湊表,hash table)等等資料結構都是這種思路。但是隨著集合中元素的增加,我們需要的儲存空間越來越大。同時檢索速度也越來越慢,上述三種結構的檢索時間複雜度分別為:o(n), o(log n), o(n/k)。
布隆過濾器的原理是,當乙個元素被加入集合時,通過k個hash函式將這個元素對映成乙個位陣列中的k個點,把它們置為1。檢索時,我們只要看看這些點是不是都是1就(大約)知道集合中有沒有它了:如果這些點有任何乙個0,則被檢元素一定不在;如果都是1,則被檢元素很可能在。這就是布隆過濾器的基本思想。
利用布隆過濾器解決快取穿透
在快取穿透上的應用,是為了避免惡意使用者頻繁請求快取中不存在db也不存在的值,會導致快取失效、db負載過大,可以使用bloomfilter把所有資料放到bit陣列中,當使用者請求時存在的值肯定能放行,部分不存在的值也會被放行,絕大部分會被攔截,這些少量漏網之魚對於db的影響就會比大量穿透好的多了
如何過濾惡意請求:
如果hash後的所有bit位中只要有乙個為0,則判定肯定不存在,會被攔截,絕大多數都是這種情況。然而由於布隆過濾器是有誤差的,可能計算的bit位都是1,但請求的資料並不真實存在,這種情況也會放行到資料庫。但這種誤差是可控的。 至少保證了大部分的惡意請求不會打到資料庫。
快取穿透?了解下布隆過濾器
布隆過濾器,英文叫bloomfilter,可以說是乙個二進位制向量和一系列隨機對映函式實現。可以用於檢索乙個元素是否在乙個集合中。下面來看看布隆過濾器是如何判斷元素在乙個集合中,如下圖 有三個hash函式和乙個位陣列,oracle經過三個hash函式,得到第1 4 5位為1,database同理得到...
布隆過濾器
布隆過濾器 bloom filter 是1970年由布隆提出的。它實際上是乙個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索乙個元素是否在乙個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。如果想要判斷乙個元素是不是在乙個集合裡,一般想到...
布隆過濾器
布隆過濾器的概念 如果想要判斷乙個元素是不是在乙個集合裡,一般想到的是將所有元素儲存起來,然後通過比較確定。鍊錶,樹等等資料結構都是這種思路.但是隨著集合中元素的增加,我們需要的儲存空間越來越大,檢索速度也越來越慢 o n o logn 不過世界上還有一種叫作雜湊表 又叫 雜湊表,hash tabl...