布隆過濾器講解

布隆過濾器

簡介

布隆過濾器是一種數據結構。比較巧妙的概率型數據結構,特點是高效的插入和查詢。查詢的結果是:某樣結果是一定不存在,或者是可能存在。
比較:相對與傳統的list,set,map等數據結構,更高效和佔用空間更少,缺點是返回結果是概率性,不確定。
布隆過濾器是一個bit向量或者說是一個bit數組。

不支持刪除

如何選擇哈希值和布隆過濾器長度?

在這裏插入圖片描述
在這裏插入圖片描述
k 爲哈希函數個數,m 爲布隆過濾器長度,n 爲插入的元素個數,p 爲誤報率。

例子

減少磁盤 IO 或者網絡請求
性能很低的哈希函數不是個好選擇,推薦 MurmurHash、Fnv 這些。
大Value拆分
Redis 因其支持 setbit 和 getbit 操作,且純內存性能高等特點,因此天然就可以作爲布隆過濾器來使用。但是布隆過濾器的不當使用極易產生大 Value,增加 Redis 阻塞風險,因此生成環境中建議對體積龐大的布隆過濾器進行拆分。

拆分的形式方法多種多樣,但是本質是不要將 Hash(Key) 之後的請求分散在多個節點的多個小 bitmap (本質是Redis中的string)上,而是應該拆分成多個小 bitmap 之後,對一個 Key 的所有哈希函數都落在這一個小 bitmap 上。

guava實現布隆過濾器

<dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
        </dependency>

redis實現布隆過濾器

博客https://www.cnblogs.com/CodeBear/p/10911177.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章