Distributed bloom filters on Redis (using the Hedis client).
The hash family algorithm is partly inspired by Brian O'Sullivan's bloomfilter package.
- Implementation of the FNV-1/FNV-1a hash function is included
- Automatic derivation of a hash family from a single hash function as described by Kirsch and Mitzenmacher
- The bloom filter is distributed without extra effort since Redis does the heavy lifting
- Every
Hashable
type can be added to the bloom filter - Every
Binary
type can be hashed
A benchmark for the FNV hash function is included and can
be invoked using cabal bench
or stack bench
.
An HTML report is generated as report.html
.
A testing suite using tasty
is included.
- Separate the FNV hash function into a separate package
- The actual operations (
addBF
,queryBF
, etc) should ideally live in aMonadReader (Bloom a)
, but this requires some work on the Hedis side because ofRedisCtx
- The only supported FNV hash sizes are 32 and 64 bits.
Support for larger widths is a matter of having a
data type with instances for
FiniteBits
andNum
. - The offset basis (
fnvOffsetBasis
) is not correctly computed, although this has absolutely no effect on the performance of the hash function in practice.