简介:工作中可能会遇到,处理大批量数据的去重工作,例如爬虫,数据清洗,需要在大数据量下判断数据是否存在。如果我们对于判断的准确性稍微放松一些,就可以,
评估:如果你的数据量不大,在千万以下,并且拥有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
超过误报率时抛出异常,