Persistent storage of arbitrary python objects
Project description
SaveState
pip install savestate
Documentation: https://mrthearman.github.io/savestate/
Source Code: https://github.com/MrThearMan/savestate/
Contributing: https://github.com/MrThearMan/savestate/blob/main/CONTRIBUTING.md
SaveState is a cross-platform fast file storage for arbitrary python objects. It's similar to python's builtin shelve module, but aims to be more performant on Windows while being cross-platform compatible.
Savestate is inspired by semidbm2, with a more modern interface. mapping-like functions, a context manager, and support for arbitrary python objects.
Implementation details:
- Pure python
- No requirements or dependencies
- A dict-like interface (no unions)
- Same, single file on Windows and Linux (unlike shelve)
- Key and value integrity can be evaluated with a checksum, which will detect data corruption on key access.
- Recovery from missing bytes at the end of the file, or small amounts of corrupted data in the middle
- Both values AND keys put in savestate must support pickling.
Note the security implications of this!
- This means that you can use arbitrary objects as keys if they support pickle (unlike shelve)
- All the keys of the savestate are kept in memory, which limits the savestate size (not a problem for most applications)
- NOT Thread safe, so cannot be accessed by multiple processes
- File is append-only, so the more non-read operations you do, the more the file size is going to balloon
- However, you can compact the savestate, usually on savestate.close(), which will replace the savestate with a new file with only the current non-deleted data. This will impact performance a little, but not by much
Performance:
- About 50-60% of the performance of shelve with gdbm (linux),
but >5000% compared to shelve with dumbdbm (windows) (>20000% for deletes!)
- Performance is more favorable with large keys and values when compared to gdbm, but gdbm is still faster on subsequent reads/writes thanks to its caching
- A dbm-mode for about double the speed of regular mode, but only string-type keys and values
- This is about 25-30% of the performance of gdbm on its own.
- Note: Values will be returned in bytes form!
Source code includes a benchmark that you can run to get more accurate performance on your specific machine.
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
Built Distribution
File details
Details for the file savestate-0.1.2.tar.gz
.
File metadata
- Download URL: savestate-0.1.2.tar.gz
- Upload date:
- Size: 12.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.11.7 Linux/6.2.0-1018-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 64424da28cd52d540ebf0d9c378772c5ed96d1eaa8e188f255df1e4e3fe8f4d8 |
|
MD5 | 076713ac0824725233e59c563b17d154 |
|
BLAKE2b-256 | ae67af5814a26128e28c9b0aae45f9be38fa89357cb1ad91f589e321a77c54aa |
File details
Details for the file savestate-0.1.2-py3-none-any.whl
.
File metadata
- Download URL: savestate-0.1.2-py3-none-any.whl
- Upload date:
- Size: 13.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.11.7 Linux/6.2.0-1018-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 95affe94b3dc40761173d4a50c7fb1e159f14a6b61ff819c99dbf0cdfc77c841 |
|
MD5 | 06e548834c18205faddf504591fdd5b9 |
|
BLAKE2b-256 | d4fdc212b43a61b43f65ecedd9f2d94a806398f949c4c1a50256bd3650352f72 |