Skip to main content

lower memory alternative to string-to-string dict

Project description

logo

PyPI - License Tests

strstrdict

Low memory overhead alternative to Python's dict, with string keys and values.

Uses half of the memory of dict for strings of length 40, at the cost of being half as fast. More improvement at shorter strings, less at longer ones. See more at benchmarks.

📝 Documentation

Drop-in replacement for dict with the following limitations:

  • Only supports string keys and values.
  • Iterating order is unspecified.
  • Any modification invalidates iterators.
>>> from strstrdict import StrStrDict

>>> d = StrStrDict()
>>> d['foo'] = 'bar'
>>> d['foo']
'bar'

To KISS, this project only supports a string to string dictionary.

More:

🐍 Installation

pip install strstrdict

📈 Benchmarks

Filling a dictionary with 1m items, key and value strings 5-10 chars long, from a pool of 2m random strings. Then reading values 1m times, with a 50% hit rate.

Fill time (s) Read time (s) Memory (MB)
dict 0.19s 0.17s 159.60
sqlitedict[^wrapper] 10.31s 51.79s 69.41
strstrdict 0.41s 0.44s 64.44

Filling a dictionary with 1m items, key and value strings 20-30 chars long, from a pool of 2m random strings. Then reading values 1m times, with a 50% hit rate.

Fill time (s) Read time (s) Memory (MB)
dict 0.26s 0.21s 193.23
sqlitedict[^wrapper] 9.17s 41.09s 139.40
strstrdict 0.41s 0.42s 95.38

Filling a dictionary with 1m items, key and value strings 100-200 chars long, from a pool of 2m random strings. Then reading values 1m times, with a 50% hit rate.

Fill time (s) Read time (s) Memory (MB)
dict 0.38s 0.24s 447.02
sqlitedict[^wrapper] 11.31s 42.62s 572.88
strstrdict 0.76s 0.56s 344.73

[^wrapper]: SqliteDict is used with commiting every 1000 writes. Note that SqliteDict is not intended for in-memory storage, but still has great efficiency at short strings.

🙏 Thanks & Credits

parallel-hashmap for their amazing header-only library!

pysimdjson for a reference how to write a cython lib!

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

strstrdict-0.0.2.tar.gz (144.2 kB view hashes)

Uploaded Source

Built Distributions

strstrdict-0.0.2-pp39-pypy39_pp73-win_amd64.whl (29.0 kB view hashes)

Uploaded PyPy Windows x86-64

strstrdict-0.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

strstrdict-0.0.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (32.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

strstrdict-0.0.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (31.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

strstrdict-0.0.2-pp38-pypy38_pp73-win_amd64.whl (28.9 kB view hashes)

Uploaded PyPy Windows x86-64

strstrdict-0.0.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (32.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

strstrdict-0.0.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (32.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

strstrdict-0.0.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (31.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

strstrdict-0.0.2-pp37-pypy37_pp73-win_amd64.whl (28.9 kB view hashes)

Uploaded PyPy Windows x86-64

strstrdict-0.0.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (32.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

strstrdict-0.0.2-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (32.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

strstrdict-0.0.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (31.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

strstrdict-0.0.2-cp311-cp311-win_amd64.whl (31.1 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

strstrdict-0.0.2-cp311-cp311-win32.whl (28.2 kB view hashes)

Uploaded CPython 3.11 Windows x86

strstrdict-0.0.2-cp311-cp311-musllinux_1_1_x86_64.whl (823.6 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

strstrdict-0.0.2-cp311-cp311-musllinux_1_1_ppc64le.whl (862.7 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ ppc64le

strstrdict-0.0.2-cp311-cp311-musllinux_1_1_i686.whl (871.3 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

strstrdict-0.0.2-cp311-cp311-musllinux_1_1_aarch64.whl (807.4 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ ARM64

strstrdict-0.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (212.9 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

strstrdict-0.0.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (217.4 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

strstrdict-0.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (207.9 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

strstrdict-0.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (210.7 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

strstrdict-0.0.2-cp310-cp310-win_amd64.whl (32.0 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

strstrdict-0.0.2-cp310-cp310-win32.whl (29.0 kB view hashes)

Uploaded CPython 3.10 Windows x86

strstrdict-0.0.2-cp310-cp310-musllinux_1_1_x86_64.whl (827.1 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

strstrdict-0.0.2-cp310-cp310-musllinux_1_1_ppc64le.whl (868.2 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ ppc64le

strstrdict-0.0.2-cp310-cp310-musllinux_1_1_i686.whl (875.9 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

strstrdict-0.0.2-cp310-cp310-musllinux_1_1_aarch64.whl (811.0 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ ARM64

strstrdict-0.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (215.5 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

strstrdict-0.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (221.0 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

strstrdict-0.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (211.2 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

strstrdict-0.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (213.3 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

strstrdict-0.0.2-cp39-cp39-win_amd64.whl (32.6 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

strstrdict-0.0.2-cp39-cp39-win32.whl (29.3 kB view hashes)

Uploaded CPython 3.9 Windows x86

strstrdict-0.0.2-cp39-cp39-musllinux_1_1_x86_64.whl (829.2 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

strstrdict-0.0.2-cp39-cp39-musllinux_1_1_ppc64le.whl (870.6 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ ppc64le

strstrdict-0.0.2-cp39-cp39-musllinux_1_1_i686.whl (878.0 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

strstrdict-0.0.2-cp39-cp39-musllinux_1_1_aarch64.whl (813.2 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ ARM64

strstrdict-0.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (218.9 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

strstrdict-0.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (224.8 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

strstrdict-0.0.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (214.6 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

strstrdict-0.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (215.9 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

strstrdict-0.0.2-cp38-cp38-win_amd64.whl (32.6 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

strstrdict-0.0.2-cp38-cp38-win32.whl (29.4 kB view hashes)

Uploaded CPython 3.8 Windows x86

strstrdict-0.0.2-cp38-cp38-musllinux_1_1_x86_64.whl (830.3 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

strstrdict-0.0.2-cp38-cp38-musllinux_1_1_ppc64le.whl (872.2 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ ppc64le

strstrdict-0.0.2-cp38-cp38-musllinux_1_1_i686.whl (880.2 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

strstrdict-0.0.2-cp38-cp38-musllinux_1_1_aarch64.whl (814.5 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ ARM64

strstrdict-0.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (218.3 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

strstrdict-0.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (224.3 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

strstrdict-0.0.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (214.2 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

strstrdict-0.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (215.4 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

strstrdict-0.0.2-cp37-cp37m-win_amd64.whl (32.4 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

strstrdict-0.0.2-cp37-cp37m-win32.whl (28.9 kB view hashes)

Uploaded CPython 3.7m Windows x86

strstrdict-0.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl (822.0 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

strstrdict-0.0.2-cp37-cp37m-musllinux_1_1_ppc64le.whl (861.4 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ ppc64le

strstrdict-0.0.2-cp37-cp37m-musllinux_1_1_i686.whl (871.0 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

strstrdict-0.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl (805.8 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ ARM64

strstrdict-0.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (210.7 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

strstrdict-0.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (215.8 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ppc64le

strstrdict-0.0.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (206.5 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686

strstrdict-0.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (208.5 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64

strstrdict-0.0.2-cp36-cp36m-win_amd64.whl (36.9 kB view hashes)

Uploaded CPython 3.6m Windows x86-64

strstrdict-0.0.2-cp36-cp36m-win32.whl (32.1 kB view hashes)

Uploaded CPython 3.6m Windows x86

strstrdict-0.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl (822.8 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ x86-64

strstrdict-0.0.2-cp36-cp36m-musllinux_1_1_ppc64le.whl (862.4 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ ppc64le

strstrdict-0.0.2-cp36-cp36m-musllinux_1_1_i686.whl (871.9 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ i686

strstrdict-0.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl (807.3 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ ARM64

strstrdict-0.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (211.6 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64

strstrdict-0.0.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (217.2 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ ppc64le

strstrdict-0.0.2-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl (207.0 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ i686

strstrdict-0.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (209.4 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ ARM64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page