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.1.tar.gz (9.6 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.1-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: rottl-0.0.1.tar.gz
  • Upload date:
  • Size: 9.6 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.1.tar.gz
Algorithm Hash digest
SHA256 e855fe7a2e938db90a90d49b4fe1310005611a0f124637bf86aa0729a9811632
MD5 6841556ebc5558b55f8c501b6523329c
BLAKE2b-256 4283b8287793074efa6addcb61cd2f9bd8e320b4bc217c7b5492327269def174

See more details on using hashes here.

Provenance

The following attestation bundles were made for rottl-0.0.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: rottl-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 9.0 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1e0ab05e4744b3f7770cc6f3e7b928f69b4bf2fda75f20379a0626315aa20936
MD5 e2772c148ee4b033123fb8afa7dca846
BLAKE2b-256 4633873330f9ff27979323cbf751e09617b6537bfb9a9deb3202bb6cce6922f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for rottl-0.0.1-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