用python实现布谷鸟滤波器
cuckoop的Python项目详细描述
布谷鸟滤波器和布卢姆滤波器一样,是一种快速的概率数据结构, 近似集成员查询,具有一些小的假阳性概率。 虽然bloom过滤器具有空间效率并且被广泛使用,但是它们没有 支持在不重建整个筛选器的情况下从集合中删除项。 这可以通过对bloom过滤器的几个扩展来克服,例如 正在计算bloom过滤器,但开销很大。
布谷鸟过滤器支持在实现 比布卢姆过滤器性能更高。布谷鸟滤波器是基于部分键的 布谷鸟散列,只存储插入的每个项目的指纹。布谷鸟 过滤器提供比bloom过滤器更高的查找性能,并且使用更少的 如果目标误报率为<;3%,则空间大于bloom过滤器。
范斌的原始研究论文Cuckoo Filter: Practically Better Than Bloom, 安徒生、卡明斯基和米岑马赫 更详细地描述数据结构。
用法
>>>fromcuckoopyimportCuckooFilter# Initialize a cuckoo filter with 10000 buckets with bucket size 4 and fingerprint size of 1 byte>>>cf=CuckooFilter(capacity=10000,bucket_size=4,fingerprint_size=1)
将项目插入筛选器:
>>>cf.insert('Hello!')True
在筛选器中查找项目:
>>>cf.contains('Hello!')True>>>'Hello!'incfTrue
从筛选器中删除项目:
>>>cf.delete('Hello!')True
获取筛选器的大小(存在的项目数):
>>>cf.size4>>>len(cf)4
在本地运行测试
此项目使用pytest进行测试。确保你 将tox安装到本地计算机上,并从 项目,运行:
$ tox
此命令在Python3.5和Python3.6环境中运行单元测试 代码覆盖范围详细信息。它还运行pep8(flake8)检查。对一个 特定环境(py35、py36或pep8),使用-e选项。