Skip to main content

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 insert
  • error_rate — acceptable false positive rate, e.g. 0.01 for 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cbloom-0.1.0.tar.gz (7.9 kB view details)

Uploaded Source

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

Hashes for cbloom-0.1.0.tar.gz
Algorithm Hash digest
SHA256 5aff5842221365884078b629788e776a494d94fee8af46c0b6d8bdef1ff07e02
MD5 fc14c54dd4f78aabaca580768fbe2de6
BLAKE2b-256 e9fc8750a2ce2ea46e8bce3bd0ca1f597030be72dac9e9453ebf5d914b52cc37

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page