工作需要使用 python 處理 mongodb 資料庫兩億資料量去重複,需要在大資料量下快速判斷資料是否存在
參考資料:https://segmentfault.com/q/1010000000613729
網上了解到 Bloom Filter ,Bloom filter 是由 Howard Bloom 在 1970 年提出的二進制向量資料結構,它具有很好的空間和時間效率,被用來檢測一個元素是不是集合中的一個成員。
關于 Bloom Filter 的詳細介紹請參考:百度百科
使用Python可直接安裝 Pybloom 包,這裡已經實作了 Bloom Filter。
安裝 Pybloom 包過程曲折,報錯及解決辦法在此:windows下python3.7安裝pybloom報錯解決辦法
包安裝成功後就可以愉快的使用了
使用例子如下:
from pybloom import BloomFilter
bf = BloomFilter(capacity=10000, error_rate=0.001)
bf.add("www.baidu.com")
print("www.baidu.com" in bf) # True
print("www.douban.com" in bf) # False
更具體的使用可參考:https://blog.csdn.net/preyta/article/details/72970887
BloomFilter 是一個定容的過濾器,error_rate 是指最大的誤報率是0.1%(可以省略),capacity 是容量大小,而 ScalableBloomFilter 是一個不定容量的布隆過濾器,它可以不斷添加元素。add 方法是添加元素,如果元素已經在布隆過濾器中,就傳回 true,如果不在傳回 fasle 并将該元素添加到過濾器中。判斷一個元素是否在過濾器中,隻需要使用 in 運算符即可了。
簡單易用的一個 Python 庫,希望對大家有幫助。