當我們使用快取或者其他場景的時候,有可能遇到一種情況,就是明明沒有這條資料,但是他又在正常區間內,比如說訪問id為700000的資料,實際上你的資料只有1w條。資料庫中都沒有,那快取中也就沒有。這時候如果必須每次都要去快取和資料庫中查詢,則會極大的浪費快取和資料庫資源。
而布隆過濾器,提供一種機制,就是過濾掉大部分不合理的資料。如果布隆過濾器告訴你這個資料不存在,則一定不存在,也就不需要去做浪費資源的操作。
本質上布隆過濾器是一種資料結構,比較巧妙的概率型資料結構(probabilistic data structure),特點是高效地插入和查詢,可以用來告訴你 「某樣東西一定不存在或者可能存在」。
相比於傳統的 set、hashmap 等資料結構,它查詢高效、占用空間卻更少,但是缺點是其返回的結果是概率性的,而不是確切的。
實現原理
其本質是應用了雜湊函式和點陣圖。
加入成員:
通過使用n個不同的hash函式計算出某個成員的雜湊值,然後把這幾個hash值對應的點陣圖的位置設定為1。
查詢成員:
按照上面的n個hash函式,計算出雜湊值後,去查詢點陣圖上對應的位置是否都為1,如果都為1,則證明元素可能存在。如果有其中乙個不為1,則資料一定不存在。
因為出於效率考慮
spark 布隆過濾器 bloomFilter
資料過濾在很多場景都會應用到,特別是在大資料環境下。在資料量很大的場景實現過濾或者全域性去重,需要儲存的資料量和計算代價是非常龐大的。很多小夥伴第一念頭肯定會想到布隆過濾器,有一定的精度損失,但是儲存效能和計算效能可以達到幾何級別的提公升。很多第三方框架也實現了相應的功能,比如hbase框架實現的布...
布隆過濾器
布隆過濾器 bloom filter 是1970年由布隆提出的。它實際上是乙個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索乙個元素是否在乙個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。如果想要判斷乙個元素是不是在乙個集合裡,一般想到...
布隆過濾器
布隆過濾器的概念 如果想要判斷乙個元素是不是在乙個集合裡,一般想到的是將所有元素儲存起來,然後通過比較確定。鍊錶,樹等等資料結構都是這種思路.但是隨著集合中元素的增加,我們需要的儲存空間越來越大,檢索速度也越來越慢 o n o logn 不過世界上還有一種叫作雜湊表 又叫 雜湊表,hash tabl...