Skip to main content

A cuckoo filter implementation.

Project description

Cuckoo Filter

Overview

Cuckoo filter is a Bloom filter replacement for approximated set-membership queries. While Bloom filters are well-known space-efficient data structures to serve queries like "if item x is in a set?", they do not support deletion. Their variances to enable deletion (like counting Bloom filters) usually require much more space.

Cuckoo filters provide the flexibility to add and remove items dynamically. A cuckoo filter is based on cuckoo hashing (and therefore named as cuckoo filter). It is essentially a cuckoo hash table storing each key's fingerprint. Cuckoo hash tables can be highly compact, thus a cuckoo filter could use less space than conventional Bloom filters, for applications that require low false positive rates (< 3%).

For details about the algorithm and citations please use:

"Cuckoo Filter: Practically Better Than Bloom" in proceedings of ACM CoNEXT 2014 by Bin Fan, Dave Andersen and Michael Kaminsky

API

The filter is wrapped in a Python extension and packaged for cross-platform installation. CuckooFilter objects support the following operations:

  • f.add(item) -> int: insert an item to the filter
  • f.contains(item) -> int: return if item is already in the filter. Note that this method may return false positive results like Bloom filters
  • f.remove(item) -> int: delete the given item from the filter. Note that to use this method, it must be ensured that this item is in the filter (e.g., based on records on external storage); otherwise, a false item may be deleted.
  • f.item_count -> int: return the total number of items currently in the filter
  • f.memory_size -> int: return the filter size in bytes
  • f.victim -> Optional[tuple[int, int]]: return metadata about any victim

Filter implementation authors

Project details


Release history Release notifications | RSS feed

This version

1.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

refcuckoo-1.0-pp38-pypy38_pp73-win_amd64.whl (19.2 kB view hashes)

Uploaded PyPy Windows x86-64

refcuckoo-1.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (66.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

refcuckoo-1.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (68.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

refcuckoo-1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (16.0 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

refcuckoo-1.0-pp37-pypy37_pp73-win_amd64.whl (19.1 kB view hashes)

Uploaded PyPy Windows x86-64

refcuckoo-1.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (65.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

refcuckoo-1.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (68.3 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

refcuckoo-1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (9.2 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

refcuckoo-1.0-cp310-cp310-win_amd64.whl (11.1 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

refcuckoo-1.0-cp310-cp310-win32.whl (10.4 kB view hashes)

Uploaded CPython 3.10 Windows x86

refcuckoo-1.0-cp310-cp310-musllinux_1_1_x86_64.whl (613.0 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

refcuckoo-1.0-cp310-cp310-musllinux_1_1_i686.whl (666.8 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

refcuckoo-1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (59.5 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

refcuckoo-1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (59.3 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

refcuckoo-1.0-cp310-cp310-macosx_10_9_x86_64.whl (9.9 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

refcuckoo-1.0-cp39-cp39-win_amd64.whl (11.1 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

refcuckoo-1.0-cp39-cp39-win32.whl (10.4 kB view hashes)

Uploaded CPython 3.9 Windows x86

refcuckoo-1.0-cp39-cp39-musllinux_1_1_x86_64.whl (612.7 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

refcuckoo-1.0-cp39-cp39-musllinux_1_1_i686.whl (666.5 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

refcuckoo-1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (59.2 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

refcuckoo-1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (59.1 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

refcuckoo-1.0-cp39-cp39-macosx_10_9_x86_64.whl (9.9 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

refcuckoo-1.0-cp38-cp38-win_amd64.whl (11.1 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

refcuckoo-1.0-cp38-cp38-win32.whl (10.5 kB view hashes)

Uploaded CPython 3.8 Windows x86

refcuckoo-1.0-cp38-cp38-musllinux_1_1_x86_64.whl (611.8 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

refcuckoo-1.0-cp38-cp38-musllinux_1_1_i686.whl (665.8 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

refcuckoo-1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (58.4 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

refcuckoo-1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (58.9 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

refcuckoo-1.0-cp38-cp38-macosx_10_9_x86_64.whl (9.9 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

refcuckoo-1.0-cp37-cp37m-win_amd64.whl (11.1 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

refcuckoo-1.0-cp37-cp37m-win32.whl (10.4 kB view hashes)

Uploaded CPython 3.7m Windows x86

refcuckoo-1.0-cp37-cp37m-musllinux_1_1_x86_64.whl (612.4 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

refcuckoo-1.0-cp37-cp37m-musllinux_1_1_i686.whl (666.4 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

refcuckoo-1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (57.9 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

refcuckoo-1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (58.5 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

refcuckoo-1.0-cp37-cp37m-macosx_10_9_x86_64.whl (9.8 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

refcuckoo-1.0-cp36-cp36m-win_amd64.whl (11.1 kB view hashes)

Uploaded CPython 3.6m Windows x86-64

refcuckoo-1.0-cp36-cp36m-win32.whl (10.4 kB view hashes)

Uploaded CPython 3.6m Windows x86

refcuckoo-1.0-cp36-cp36m-musllinux_1_1_x86_64.whl (611.4 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ x86-64

refcuckoo-1.0-cp36-cp36m-musllinux_1_1_i686.whl (665.4 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ i686

refcuckoo-1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (57.9 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

refcuckoo-1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (58.5 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

refcuckoo-1.0-cp36-cp36m-macosx_10_9_x86_64.whl (9.8 kB view hashes)

Uploaded CPython 3.6m macOS 10.9+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page