probabilistic-rs
Probabilistic data structures in Rust with Python bindings and HTTP API.
Features
- Bloom Filter — fast membership testing with bulk ops and optional Fjall persistence
- Expiring Bloom Filter — auto-expires elements via sliding time windows
- HTTP API — REST server with Swagger UI, managing multiple named filters
- Python Bindings — native wheels via PyO3/maturin
- CLI + TUI — interactive terminal interface

Installation
Rust:
Python:
Quick Start
Rust — Bloom Filter
use ;
async
Rust — Expiring Bloom Filter
use ;
use Duration;
Python
=
assert
=
assert
HTTP API
# Start server (default: localhost:3000)
# Create a filter, insert, query
Endpoints: create, delete, insert, contains, bulk_insert, bulk_contains, clear, stats, list — available for both /api/v1/bloom and /api/v1/ebloom. Swagger UI at /swagger-ui.
CLI
# Create filter
# Operations
# Interactive TUI
Benchmarks
Measured on Apple M-series via cargo bench (criterion, 100 samples). Times are total for N operations.
Bloom Filter (in-memory)
| Operation | 1K elements | 100K elements | 1M elements |
|---|---|---|---|
| Insert | 60.2 µs | 6.15 ms | 64.1 ms |
| Query | 61.3 µs | 6.17 ms | 63.1 ms |
Expiring Bloom Filter (in-memory, 3 levels — 5 levels nearly identical)
| Operation | 1K elements | 100K elements | 1M elements |
|---|---|---|---|
| Insert | 63.8 µs | 6.61 ms | 68.0 ms |
| Query | 63.4 µs | 6.52 ms | 67.0 ms |
| Bulk insert | 59.7 µs | 6.16 ms | 63.8 ms |
| Bulk query | 62.3 µs | 6.41 ms | 65.8 ms |
| Level rotate | 224 µs | 255 µs | — |
Both filters sustain ~15–17M ops/s (60–65 ns/op) across all dataset sizes. The expiring filter adds ~5–10% overhead over plain bloom due to multi-level bookkeeping. Bulk operations match or slightly outperform single-item ops. Level rotation (TTL expiry) takes ~250 µs regardless of filter size.
Configuration
| Parameter | Description | Default |
|---|---|---|
capacity |
Max elements | 1,000,000 |
false_positive_rate |
Desired FPR | 0.01 |
level_duration |
TTL per level (expiring) | 60s |
max_levels |
Filter levels (expiring) | 3 |
License
MIT