No commit activity in last 3 years
No release in over 3 years
Project started mainly for Extract Transform Load (ETL) operations
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

 Project Readme

Acts As Bloom Filter

BEWARE

THIS WILL LOAD EVERY RECORD IN YOUR TABLE AND USE LOTS OF MEMORY !!!

IF YOUR HAVE A LARGE TABLE IT WILL CRASH YOUR SYSTEM !!!

It would not be useful otherwise, but you are trading network and disk usage for memory.

Features

  • Very fast way to know if something is MORE THAN LIKELY or ABSOLUTELY NOT in your database once the data is loaded.
  • Easy to use
  • Can bloomfilter on more than one column / field

Requirements

I ran into deprecated code trying to get Rails 3 working so it is Rails 4 and up for now.

Install

You can install via

gem install acts_as_bloomfilter

or add this to your Gemfile

gem 'acts_as_bloomfilter' , git:  "https://github.com/lankford/acts_as_bloomfilter"

then in your model add

include ActsAsBloomFilter

acts_as_bloomfilter :myfieldname , :myothername

like so

class MyClass

  include ActsAsBloomFilter

  acts_as_bloomfilter :myfieldname , :myothername

end

Usage

The main use of this for me is when I am doing Extract Transform Load operations which I do a lot of.

I would do something like

unless MyClass.myfieldname_bloom.include? new_value

  MyClass.find_or_create_by(myfieldname:new_value)

end

New methods

This adds to your existing model based on the field name you are blooming for

MyClass.myfieldname_bloom

MyClass.myfieldname_bloom.insert 'some value'

MyClass.myfieldname_bloom.delete 'some value'

MyClass.myfieldname_bloom.include? 'some value'

MyClass.myfieldname_bloom.stats

Gotchas

Records that are destroyed are automatically removed from the bloomfilter.

Rails does not have a after_delete callback (coming in rails 5 I think) so those are not removed.

You can remove them with a call like this:

 myfieldname_bloom.delete myfieldname

Credits

Tatsuya Mori valdzone@gmail.com (Original C implementation)

This work is based on Ilya Grigorik's bloomfilter wrapper called bloomfilter-rb