布隆过滤器的学习之路

    xiaoxiao2022-07-07  133

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

    评估:如果你的数据量不大,在千万以下,并且拥有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

    超过误报率时抛出异常,

    最新回复(0)