Implementation of Scalable Bloom Filters which also provides serde serialization and deserialize.
A bloom filter lets you insert
items, and then test association with contains
.
It's space and time efficient, at the cost of false positives.
In particular, if contains
returns true
, it may be in filter.
But if contains
returns false, it's definitely not in the bloom filter.
You can control the failure rate by setting desired_error_prob
and est_insertions
appropriately.
```rust use growablebloomfilter::GrowableBloom;
// Create and insert into the bloom filter let mut gbloom = GrowableBloom::new(0.05, 1000); gbloom.insert(&0); assert!(gbloom.contains(&0));
// Serialize and Deserialize the bloom filter use serde_json;
let s = serdejson::tostring(&gbloom).unwrap(); let desgbloom: GrowableBloom = serdejson::fromstr(&s).unwrap(); assert!(desgbloom.contains(&0)); ```
Bloom filters are typically used as a pre-cache to avoid expensive operations. For example, if you need to ask ten thousand servers if they have data XYZ, you could use GrowableBloom to figure out which ones do NOT have XYZ.
The (de)serialized bloom filter can be transferred and used across different platforms, idependent of endianess, architecture and word size.
Note that stability is only guaranteed within the same major version of the crate.