美文网首页
Python使用布隆过滤器

Python使用布隆过滤器

作者: Traim | 来源:发表于2017-02-14 13:48 被阅读1504次

安装

pip install pybloom

该模块包含两个类实现布隆过滤器功能。
BloomFilter 是定容。
ScalableBloomFilter 可以自动扩容

使用

>>> from pybloom import BloomFilter
>>> f = BloomFilter(capacity=1000, error_rate=0.001) # capacity是容量, error_rate 是能容忍的误报率
>>> f.add('Traim304') # 当不存在该元素,返回False
False
>>> f.add('Traim304') # 若存在,返回 True
True
>>> 'Traim304' in f # 值得注意的是若返回 True。该元素可能存在, 也可能不存在。过滤器能容许存在一定的错误
True
>>> 'Jacob' in f # 但是 False。则必定不存在
False
>>> len(f) # 当前存在的元素
1

>>> f = BloomFilter(capacity=1000, error_rate=0.001) 
>>> from pybloom import ScalableBloomFilter
>>> sbf = ScalableBloomFilter(mode=ScalableBloomFilter.SMALL_SET_GROWTH)
>>> # sbf.add() 与 BloomFilter 同

超过误报率时抛出异常


>>> f = BloomFilter(capacity=1000, error_rate=0.0000001)
>>> for a in range(1000):
...     _ = f.add(a)
...
>>> len(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()
>>> len(f)
1000
>>> f.add(1000)
False
>>> f.add(1001) # 当误报率超过 error_rate 会报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/pybloom/pybloom.py", line 182, in add
    raise IndexError("BloomFilter is at capacity")
IndexError: BloomFilter is at capacity

pybloom github

相关文章

  • 布隆过滤器

    布隆过滤器起源 为什么我们要用布隆过滤器? 布隆过滤器是在海量数据找到想要的结果,经常应用于redis的缓存穿透(...

  • Python使用布隆过滤器

    安装 该模块包含两个类实现布隆过滤器功能。BloomFilter 是定容。ScalableBloomFilter ...

  • 布隆过滤器(Bloom Filter)的原理和实现

    布隆过滤器使用场景 之前在《数学之美》里面看到过布隆过滤器的介绍。那么什么场景下面需要使用布隆过滤器呢? 看下下面...

  • 布隆过滤器原理

    当一个元素加入布隆过滤器中的时候,会进行如下操作: 使用布隆过滤器中的哈希函数对元素值进行计算,得到哈希值(有几个...

  • mac 下 Redis5 BloomFilter 安装及与 py

    安装及使用布隆过滤器 以前的文章有布隆去重的原理,今天来个使用 Redis5中BloomFilter和Redis...

  • Redis布隆过滤器之初体验

    之前,小马在聊缓存击穿和穿透的文中有介绍过防止缓存穿透其中的一种方式是使用布隆过滤器,那什么是布隆过滤器呢?今天就...

  • 预防缓存击穿-布隆过滤器

    为什么使用布隆过滤器 布隆过滤器是用来判断一个元素是否出现在给定集合中的重要工具,具有快速,比哈希表更节省空间等优...

  • redis布隆过滤器

    redis4+版本后可以以插件的形式使用布隆过滤器 source : https://github.com/Red...

  • Unicode-objects must be encoded

    场景 在使用布隆过滤器,设置MD5加密的时候,有出现过Unicode-objects must be encode...

  • 缓存击穿、穿透、雪崩

    穿透:缓存中没有这笔数据,请求直接打到DB上解决思路: 存储null key ,使用布隆过滤器。场景:如果查询缓存...

网友评论

      本文标题:Python使用布隆过滤器

      本文链接:https://www.haomeiwen.com/subject/xemxwttx.html