美文网首页
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

    相关文章

      网友评论

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

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