Fast Bloom filter backed by C
Project description
cbloom
A fast Bloom filter for Python, backed by a C extension.
Answers one question efficiently: "Have I seen this before?"
- No false negatives — if it says
False, the item is definitely absent - Tunable false positives — configure your own error rate (e.g.
0.01= 1%) - Low memory — 1 million items at 1% error rate uses ~1.1 MB of bits
Installation
pip install cbloom
Usage
from cbloom import BloomFilter
# 1 million expected items, 1% false positive rate
bf = BloomFilter(capacity=1_000_000, error_rate=0.01)
bf.add("hello")
bf.add("world")
bf.contains("hello") # True
bf.contains("world") # True
bf.contains("python") # False (definitely not added)
API
BloomFilter(capacity, error_rate)
capacity— maximum number of items you expect to inserterror_rate— acceptable false positive rate, e.g.0.01for 1%
| Method | Returns | Description |
|---|---|---|
.add(key) |
None |
Add a string to the filter |
.contains(key) |
bool |
True if probably present, False if definitely absent |
.item_count() |
int |
Number of items inserted |
.bit_count() |
int |
Size of the internal bit array (m) |
.hash_count() |
int |
Number of hash functions in use (k) |
How it works
Internally the filter allocates a bit array of size m (computed from your
capacity and error_rate). When you call .add(key), two hash functions
(FNV-1a and DJB2) produce k positions in the array and set those bits to 1.
.contains(key) checks all k positions -- if any bit is 0 the item was
definitely never added.
The tradeoff: once enough bits are set, unrelated keys can accidentally match
all k positions, producing a false positive. The math guarantees this stays
below your configured error_rate as long as you stay within capacity.
Use cases
- Deduplicating URLs in a web crawler
- Skipping expensive database lookups
- Checking passwords against breach lists
- Filtering seen events in a streaming pipeline
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file cbloom-0.1.0.tar.gz.
File metadata
- Download URL: cbloom-0.1.0.tar.gz
- Upload date:
- Size: 7.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5aff5842221365884078b629788e776a494d94fee8af46c0b6d8bdef1ff07e02
|
|
| MD5 |
fc14c54dd4f78aabaca580768fbe2de6
|
|
| BLAKE2b-256 |
e9fc8750a2ce2ea46e8bce3bd0ca1f597030be72dac9e9453ebf5d914b52cc37
|