Bloomex is a pure Elixir implementation of Scalable Bloom Filters.
Add Bloomex as a dependency in your mix.exs file.
def deps do
[{:bloomex, "~> 1.0"}]
end
When you are done, run mix deps.get
in your shell to fetch and compile Bloomex.
iex> bf = Bloomex.scalable(1000, 0.1, 0.1, 2)
%Bloomex.ScalableBloom...
iex> bf = Bloomex.add(bf, 5)
%Bloomex.ScalableBloom...
iex> Bloomex.member?(bf, 5)
true
iex> bf = Bloomex.add(bf, 100)
%Bloomex.ScalableBloom...
iex> Bloomex.member?(bf, 100)
true
iex> Bloomex.member?(bf, 105)
false
iex> Bloomex.member?(bf, 101) # false positive
true
You can also pass in a hashing function to be used by the Bloom filter when creating one.
(assuming we have Murmur installed as a dependency)
iex> bf = Bloomex.scalable(1000, 0.1, 0.1, 2, &(Murmur.hash_x86_128(&1)))
%Bloomex.ScalableBloom...
iex> bf = Bloomex.add(bf, 5)
%Bloomex.ScalableBloom...
iex> Bloomex.member?(bf, 5)
true
iex> bf = Bloomex.add(bf, 100)
%Bloomex.ScalableBloom...
iex> Bloomex.member?(bf, 100)
true
iex> Bloomex.member?(bf, 105) # false positive
true
iex> Bloomex.member?(bf, 101)
false