Cuckoo v1.0.1 Cuckoo
This module implements a Cuckoo Filter.
Implementation Details
The implementation follows the specification as per the paper above.
For hashing we use the x64_128 variant of Murmur3 and the Erlang phash2.
Examples
iex> cf = Cuckoo.new(1000, 16, 4)
%Cuckoo.Filter{...}
iex> {:ok, cf} = Cuckoo.insert(cf, 5)
%Cuckoo.Filter{...}
iex> Cuckoo.contains?(cf, 5)
true
iex> {:ok, cf} = Cuckoo.delete(cf, 5)
%Cuckoo.Filter{...}
iex> Cuckoo.contains?(cf, 5)
false
Summary
Functions
Checks if the Cuckoo Filter contains element
Attempts to delete element
from the Cuckoo Filter if it contains it
Returns a filter with the removed element or raises Cuckoo.Error
if an error occurs
Tries to insert element
into the Cuckoo Filter
Returns a filter with the inserted element or raises Cuckoo.Error
if an error occurs
Creates a new Cuckoo Filter using the given max_num_keys
, fingerprint_size
and
fingerprints_per_bucket
Types
Functions
Checks if the Cuckoo Filter contains element
.
Returns true
if does, otherwise returns false
.
Attempts to delete element
from the Cuckoo Filter if it contains it.
Returns {:error, :inexistent}
if the element doesn’t exist in the filter, otherwise
returns {:ok, filter}
.
Returns a filter with the removed element or raises Cuckoo.Error
if an error occurs.
Tries to insert element
into the Cuckoo Filter.
Returns {:ok, filter}
if successful, otherwise returns {:error, :full}
from which
you should consider the Filter to be full.
Returns a filter with the inserted element or raises Cuckoo.Error
if an error occurs.
new(pos_integer, pos_integer, pos_integer) :: Cuckoo.t
Creates a new Cuckoo Filter using the given max_num_keys
, fingerprint_size
and
fingerprints_per_bucket
.
The suggested values for the last two according to one of the publications should
be 16
and 4
respectively, as it allows the Cuckoo Filter to achieve a sweet spot
in space effiency and table occupancy.