布隆過濾器

什麼是布隆過濾器

本質上布隆過濾器是一種數據結構,比較巧妙的機率型數據結構(probabilistic data structure),特色是高效地插入和查詢,能夠用來告訴你 「某樣東西必定不存在或者可能存在」。數組

相比於傳統的 List、Set、Map 等數據結構,它更高效、佔用空間更少,可是缺點是其返回的結果是機率性的,而不是確切的。緩存

實現原理

與HashMap比較想象,不一樣之處在於布隆過濾器是存儲的Bit位數組,內容值只有1 與 0 很是顯著的減小了存儲大小。因此布隆過濾器只能判斷是否匹配,而沒法獲取對應匹配值。網絡

瞭解HashMap數據結構的同窗都應該知道HashMap會有機率發生碰撞,在發生碰撞時會生成鏈表或紅黑樹來解決,那布隆過濾器是如何解決這個問題的呢?數據結構

布隆過濾器數據結構

布隆過濾器數據結構

上圖邊表示分別存儲A、B、C三個值,與下邊數組的鏈接線分別表示不一樣的Hash值地址。經過過一個寫入的值計算多個Hash地址,這樣就能夠儘可能減小碰撞的可能,但絕對沒法作到絕對不碰撞。code

只能經過增長計算Hash的條數或增長數組長度來減小碰撞可能。blog

布隆過濾器如何支持刪除

根據上邊瞭解到的信息,咱們知道因布隆過濾器是使用bit位數組存儲的,若是支持刪除操做的話,可能會影響其餘值的匹配。那麼咱們還有其餘方式來使布隆過濾器支持刪除嗎?get

布隆過濾器支計數

咱們能夠改變一下數據結構,將數組改成計數形式就能夠實現,用空間來換功能。同步

適用場景

  1. 利用布隆過濾器減小磁盤 IO 或者網絡請求,由於一旦一個值一定不存在的話,咱們能夠不用進行後續昂貴的查詢請求。(緩存穿透)

個人博客即將同步至騰訊雲+社區,邀請你們一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=1ro14ignkt5pb博客

相關文章
相關標籤/搜索