如何在Python中正确的使用BloomFilter
Feb 13, 2016 · 1 minute read · Comments
python
0x1 什么是布隆过滤器(BloomFilter)
1970年,由布隆提出来的一个用于判断元素是否在集合中的高效的算法,集合中的元素可以增加,但是要删除一个元素比较困难,同时还有少量的误报率。
在数据量比较小的时候,我们可以使用Hash来判断元素是否命中,但是当元素增加起来后,Hash算法需要的空间就会急速增长,查找时间也会增加。布隆过滤器主要用在样本集合量大但是很少有删除元素,不要求100%正确率的场景下。主要有:
缓存
计数
分散聚合
数据同步
算法细节可以查看相关的文档,或者英文的维基中也有详细的介绍。
0x2 Python中的布隆过滤器
Python中有多个实现BloomFilter的包详情可以自己搜索Pypi,本文中主要介绍PyBloom,可以通过pip进行安装。
pip install pybloom
读者也可以去作者的github上直接下载源码进行编译安装
python setup.py install
0x3 使用PyBloom
python-bloomfilter中有两个类BloomFilter和ScalableBloomFilter
主要的用法:
from pybloom import BloomFilter, ScalableBloomFilter
bf = BloomFilter(capacity=10000, error_rate=0.001)
bf.add('test')
print 'test' in bf
sbf = ScalableBloomFilter(mode=ScalableBloomFilter.SMALL_SET_GROWTH)
sbf.add('dddd')
print 'ddd' in sbf
BloomFilter是一个定容的过滤器,error_rate是指最大的误报率是0.1%,而ScalableBloomFilter是一个不定容量的布隆过滤器,它可以不断添加元素。add方法是添加元素,如果元素已经在布隆过滤器中,就返回true,如果不在返回fasle并将该元素添加到过滤器中。判断一个元素是否在过滤器中,只需要使用in运算符即可了。
简单易用的一个Python库,希望对大家有帮助。
0x4 参考