Skip to main content

Rack, another shelve-like

Rack contains PersistentSet and PersistentDict classes that can be used to store data using set/dict semantics, while having contents persisted to mass storage.

This library can be used when you want to use sets or mappings that may be too big to fit in RAM, or you want them to be persisted to disk, either online (as they’re used) or once (to load/save data).

It uses LMDB or SQLite3 as underlying engine:

  • LMDB is a tiny in-process “NoSQL” database which is very fast.

  • SQLite3 is a small in-process SQL database which stores data in single files, with a well-defined on-disk layout, and is rather space-efficient.

Contents are serialized from / deserialized to Python native objects on access, so the structures are obviously slower than in-memory counterparts.

Usage

Use rack.set*.PersistentSet as you would use a set, and rack.dict*.PersistentDict as you would use a dict, except that:

  • On construction:

    • They need to take a name argument indicating the (prefix to the) location of the underlying LMDB database.

    • For LMDB, they can take a hash argument if you want to specify a non-default hasher (default is SHA256).

    • They can take a serdes argument which you can use to specify a non-default serializer/deserializer (default is Python’s marshal).

  • On use:

    • They must be used with a context manager, which is required in order to properly manage the lifetime of the database open/close, as __init__ / __del__ would not be sufficient due to the garbage collected nature of Python.

    • Operations that create a new container (eg. union, copy), take an optional name parameter, which allows to specify the location of the new database.

If you know you store elements of limited size (less than LMDB max key size), you can use rack.set_small.PersistentSet, which is ~2x faster than the non-small one due to one less indirection. If keys are too big, lmdb.BadValsizeError exceptions will occur.

Metadata

Release files for rack 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rack 0.1.4
File Size Uploaded
rack-0.1.4.tar.gz 9.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rack 0.1.4
File Interpreter ABI Platform
rack-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 20.0 kB

Release files / rack-0.1.4.tar.gz

Download URL rack-0.1.4.tar.gz
Size 9.9 kB
Tags Source
SHA-256 checksum
How to use checksums
41a5a6393b65767c4a3432331808d04613a2ef41ef005eb7de50ea9883dc2a70
BLAKE2b-256 checksum
How to use checksums
9c7e9b902229e2b49a824de089c7f09a1a9b44613614c2abfebefa5ab32f761e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.9

Release files / rack-0.1.4-py3-none-any.whl

Download URL rack-0.1.4-py3-none-any.whl
Size 10.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ce86e01c072588c549a6623155d5c8ad1eca739ce3f32814c35d37c22ca39eb9
BLAKE2b-256 checksum
How to use checksums
bf30e8ff05ea755f9140c22539d30728597052587798f0e0a1673e31923f9ca6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.9

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page