The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Algorithm::BloomFilter - A simple bloom filter data structure

SYNOPSIS

  use Algorithm::BloomFilter;
  
  my $filter = Algorithm::BloomFilter->new($absolute_nbits, $n_hashes);
  
  $filter->add("foo", "bar", "baz");
  if ($filter->test("bar")) {
    print "Eureka! 'bar' is in!\n";
  }

DESCRIPTION

This module implements a simple bloom filter in C/XS.

METHODS

new

Constructor, takes two arguments: The absolute number of bits to use for the bloom filter storage (this will be rounded up to the nearest power of 2) and the number of hash functions to evaluate for each entry.

Algorithm::BloomFilter uses SipHash internally. The C part can also use other hash functions, but the XS wrapper currently only supports SipHash.

add

Given a list of values (that will be converted to byte strings), add those values to the bloom filter.

test

Given a value (which will be converted to a byte string for this operation), test whether that value is part of the set represented by the bloom filter.

merge

Given another bloom filter of exactly the same configuration (same hash function, same number of hash function variants, same number of bits), computes a union of the two filters and stores the result in the invocant bloom filter.

serialize

Serializes the bloom filter into a string and returns it.

deserialize

Class method. Given a previously serialized bloom filter as a string, reconstructs the bloom filter. Returns the newly created Algorithm::BloomFilter object.

Beware that serialize/deserialize haven't been tested across systems with differing endianess, etc. Please do your own testing (and possibly submit patches to this caveat).

CAVEATS

Requires a uint64_t type. Untested on endianness other than x86_64's (little endian).

SEE ALSO

Wikipedia: http://en.wikipedia.org/wiki/Bloom_filter

AUTHOR

Steffen Mueller, <smueller@cpan.org>

COPYRIGHT AND LICENSE

Copyright (C) 2014-2015 by Steffen Mueller

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.0 or, at your option, any later version of Perl 5 you may have available.