布隆过滤器的学习之路

简介:工作中可能会遇到,处理大批量数据的去重工作,例如爬虫,数据清洗,需要在大数据量下判断数据是否存在。如果我们对于判断的准确性稍微放松一些,就可以,

评估:如果你的数据量不大,在千万以下,并且拥有redis资源充分,可以使用MD5的hash算法生成32位指纹,利用redis进行数据去重,如果亿级别甚至更多的数据量,就要考虑资源问题,毕竟redis的价格还是很贵的,这时候就可以利用布隆过滤。或者利用类似redis的,ssdb数据库,效率可能会低一些,但是也是很高的,只是稍逊色于redis。并且基于硬盘,很便宜。

def md5_(self,str):
    md5 = hashlib.md5()
    data = str
    md5.update(data.encode('utf-8'))
    return md5.hexdigest()

1,安装

pip3 install pybloom_live

该模块包含两个类实现布隆过滤器功能。

BloomFilter是定容。 ScalableBloomFilter可以自动扩容。initial_capacity是容量,error_rate是误报率。

from pybloom_live import ScalableBloomFilter
sbf = ScalableBloomFilter(initial_capacity=1000000000, error_rate=0.000001, mode=ScalableBloomFilter.LARGE_SET_GROWTH)
url = "www.toutiao.com"
url2 = "www.douban.com"
sbf.add(url)
print(url in sbf)   # True
print(url2 in sbf)  # False

超过误报率时抛出异常,

你可能感兴趣的:(布隆过滤器的学习之路)