python filter过滤器的使用_如何在Python中正确的使用BloomFilter

如何在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 参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值