天天看點

Python 操作 mongodb 億級資料量使用 Bloomfilter 高效率判斷唯一性 例子

工作需要使用 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 庫,希望對大家有幫助。