Skip to main content

A high-performance Python library providing bucket-based rotating data structures with approximate TTL eviction and strict memory constraints.

Project description

RoTTL — Rotating TTL Data Structures

RoTTL provides memory-efficient rotating sets, dicts, and Bloom filters with approximate TTL-based eviction.

Rather than maintaining per-item expiry timestamps, the TTL window is divided into a fixed number of rotating buckets — expired buckets are evicted as a whole, trading per-item precision for significantly lower memory usage and faster writes, at the cost of sequentially scanned lookups.

The library exposes three structures:

  • RotatingTTLSet — a rotating, TTL-based set backed by native Python set buckets.
  • RotatingTTLDict — a rotating, TTL-based dict backed by native Python dict buckets.
  • RotatingTTLBloom — a rotating, TTL-based Bloom filter backed by rbloom.

RotatingTTLSet and RotatingTTLDict support an optional history fast-reject mode, which maintains an auxiliary Bloom filter over all non-expired historical buckets. This allows most membership misses to be short-circuited without scanning the full bucket deque, at the cost of filter rebuild on each rotation.

RotatingTTLSet and RotatingTTLDict rotate automatically on both time and capacity. RotatingTTLBloom rotates automatically only by time, because estimating the number of items in a Bloom filter requires counting all set bits, which is too expensive to do on every insertion. Instead, maybe_rotate_by_saturation() can be called manually to check if the active bucket has exceeded its capacity, and if so — trigger rotation (to enforce the configured FPR).


When to use RoTTL

  • Approximate TTL is acceptable. Expiry happens at bucket boundaries, not per item. Under normal load (no capacity-based eviction), items live between ttl - (ttl / num_buckets) and ttl seconds. Capacity pressure can cause earlier eviction.
  • Memory-constrained environments. RotatingTTLSet and RotatingTTLDict use roughly 3–4× less memory than cachetools.TTLCache at all tested capacities. RotatingTTLBloom can reduce memory even further, depending on the configured bucket_fpr and num_buckets.
  • Write-heavy workloads. RoTTL's write path avoids the expensive per-item bookkeeping required for exact TTL, making it 6–15x faster than cachetools.TTLCache (varies by usage of fast-reject and rotation pressure).
  • Lookup performance scales with configuration. Lookups scan up to num_buckets buckets, so with a small bucket count the overhead is negligible. With a large bucket count, hit cost depends on which bucket the item is found in, and miss cost grows linearly. RotatingTTLSet and RotatingTTLDict's history fast-reject option makes most miss latency independent of num_buckets, at the cost of slower rotations.

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

rottl-0.0.3.tar.gz (10.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rottl-0.0.3-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

File details

Details for the file rottl-0.0.3.tar.gz.

File metadata

  • Download URL: rottl-0.0.3.tar.gz
  • Upload date:
  • Size: 10.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rottl-0.0.3.tar.gz
Algorithm Hash digest
SHA256 71844738a55bf1cf33b94653e4b5d7a3006578b693fff2eb9648b65904c00bc3
MD5 165a660eea163c5e40bcdef861aae96f
BLAKE2b-256 085e90946e6b30a623d58bdfeb174fa7fe20b137446e65c674b09caaa163f62b

See more details on using hashes here.

Provenance

The following attestation bundles were made for rottl-0.0.3.tar.gz:

Publisher: python-publish.yml on sharvul/rottl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rottl-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: rottl-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 9.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rottl-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 681cd77c83f1f700dfa3118e728a09842640fee4c1d645375d4a8689fb615def
MD5 e4d714d6a7e06c06ff27cb9185eb9c5b
BLAKE2b-256 4ffb842a3b89608d22894e6b69a8c17ac879ff5d128fe64dd98c98b05bd9d482

See more details on using hashes here.

Provenance

The following attestation bundles were made for rottl-0.0.3-py3-none-any.whl:

Publisher: python-publish.yml on sharvul/rottl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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