rocksdict 0.3.29


pip install rocksdict

  Latest version

Released: Dec 01, 2025

Project Links

Meta

Classifiers

Programming Language
  • Python :: 3.7
  • Python :: 3.8
  • Python :: 3.9
  • Python :: 3.10
  • Python :: 3.11
  • Python :: 3.12
  • Python :: 3.13
  • Python :: 3.14
  • Python :: Implementation :: CPython
  • Python :: Implementation :: PyPy

License
  • OSI Approved :: MIT License

Operating System
  • MacOS :: MacOS X
  • Microsoft :: Windows
  • POSIX :: Linux

Topic
  • Database

Development Status
  • 5 - Production/Stable

RocksDict / SpeeDict

Key-value storage for Python & Wrapper of Rocksdb and Speedb

CI PyPI PyPI Support python versions

Installation

Wheels available for macOS amd64/arm64, linux amd64/arm64, and windows amd64.

  • pip install rocksdict for rocksdb backend, then from rocksdict import Rdict
  • pip install speedict for speedb backend, then from speedict import Rdict

Introduction

This library has two purposes.

  1. As an on-disk key-value storage solution for Python.
  2. As a RocksDB / Speedict interface.

These two purposes operate in different modes:

  • Default mode, which allows storing int, float, bool, str, bytes, and other python objects (with Pickle).

  • Raw mode (options=Options(raw_mode=True)), which allows storing only bytes.

Easily inspect RocksDB created by C++, Java, or Other Languages

Since v0.3.24b2.

from rocksdict import Rdict

# This will automatically load latest options and column families.
# Note also that this is automatically RAW MODE,
# as it knows that the db is not created by RocksDict
# (since v0.3.24b2).
db = Rdict("db_path")

# list column families
cfs = Rdict.list_cf("db_path")
print(cfs)

# use one of the column families
cf1 = db.get_column_family(cfs[1])

# iterate through all key-value pairs in cf1
for k, v in cf1.items():
    print(f"{k} -> {v}")

# iterate through all wide columns in cf1
for k, v in cf1.entities():
    print(f"{k} -> {v}")

Examples

A minimal example

from rocksdict import Rdict
import numpy as np
import pandas as pd

path = str("./test_dict")

# create a Rdict with default options at `path`
db = Rdict(path)
db[1.0] = 1
db["huge integer"] = 2343546543243564534233536434567543
db["good"] = True
db["bytes"] = b"bytes"
db["this is a list"] = [1, 2, 3]
db["store a dict"] = {0: 1}
db[b"numpy"] = np.array([1, 2, 3])
db["a table"] = pd.DataFrame({"a": [1, 2], "b": [2, 1]})

# reopen Rdict from disk
db.close()
db = Rdict(path)
assert db[1.0] == 1
assert db["huge integer"] == 2343546543243564534233536434567543
assert db["good"] == True
assert db["bytes"] == b"bytes"
assert db["this is a list"] == [1, 2, 3]
assert db["store a dict"] == {0: 1}
assert np.all(db[b"numpy"] == np.array([1, 2, 3]))
assert np.all(db["a table"] == pd.DataFrame({"a": [1, 2], "b": [2, 1]}))

# iterate through all elements
for k, v in db.items():
    print(f"{k} -> {v}")

# batch get:
print(db[["good", "bad", 1.0]])
# [True, False, 1]

# delete Rdict from dict
db.close()
Rdict.destroy(path)

An Example of Raw Mode

This mode allows only bytes as keys and values.

from rocksdict import Rdict, Options

PATH_TO_ROCKSDB = str("path")

# open raw_mode, which allows only bytes
db = Rdict(path=PATH_TO_ROCKSDB, options=Options(raw_mode=True))

db[b'a'] = b'a'
db[b'b'] = b'b'
db[b'c'] = b'c'
db[b'd'] = b'd'

for k, v in db.items():
    print(f"{k} -> {v}")

# close and delete
db.close()
Rdict.destroy(PATH_TO_ROCKSDB)

New Feature Since v0.3.3

Loading Options from RocksDict Path.

Load Options and add A New ColumnFamily

from rocksdict import Options, Rdict
path = str("./rocksdict_path")

opts, cols = Options.load_latest(path)
opts.create_missing_column_families(True)
cols["bytes"] = Options()
self.test_dict = Rdict(path, options=opts, column_families=cols)

Reopening RocksDB Reads DB Options Automatically

import shutil

from rocksdict import Rdict, Options, SliceTransform, PlainTableFactoryOptions
import os

def db_options():
    opt = Options()
    # create table
    opt.create_if_missing(True)
    # config to more jobs
    opt.set_max_background_jobs(os.cpu_count())
    # configure mem-table to a large value (256 MB)
    opt.set_write_buffer_size(0x10000000)
    opt.set_level_zero_file_num_compaction_trigger(4)
    # configure l0 and l1 size, let them have the same size (1 GB)
    opt.set_max_bytes_for_level_base(0x40000000)
    # 256 MB file size
    opt.set_target_file_size_base(0x10000000)
    # use a smaller compaction multiplier
    opt.set_max_bytes_for_level_multiplier(4.0)
    # use 8-byte prefix (2 ^ 64 is far enough for transaction counts)
    opt.set_prefix_extractor(SliceTransform.create_max_len_prefix(8))
    # set to plain-table
    opt.set_plain_table_factory(PlainTableFactoryOptions())
    return opt


# create DB
db = Rdict("./some_path", db_options())
db[0] = 1
db.close()

# automatic reloading all options on reopening
db = Rdict("./some_path")
assert db[0] == 1

# destroy
db.close()
Rdict.destroy("./some_path")

More Examples on BatchWrite, SstFileWrite, Snapshot, RocksDB Options, and etc.

Go to example folder.

Limitations

Currently, do not support merge operation and custom comparator.

Full Documentation

See rocksdict documentation.

Wheel compatibility matrix

Platform CPython 3.7 CPython 3.8 CPython 3.9 CPython 3.10 CPython 3.11 CPython 3.12 CPython 3.13 CPython 3.14 PyPy 3.11 (pp73)
macosx_10_14_x86_64
macosx_11_0_arm64
manylinux2014_aarch64
manylinux2014_x86_64
manylinux_2_17_aarch64
manylinux_2_17_x86_64
manylinux_2_28_aarch64
manylinux_2_28_x86_64
musllinux_1_2_aarch64
musllinux_1_2_x86_64
win_amd64

Files in release

rocksdict-0.3.29-cp310-cp310-macosx_10_14_x86_64.whl (3.8MiB)
rocksdict-0.3.29-cp310-cp310-macosx_11_0_arm64.whl (3.5MiB)
rocksdict-0.3.29-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.9MiB)
rocksdict-0.3.29-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0MiB)
rocksdict-0.3.29-cp310-cp310-manylinux_2_28_aarch64.whl (3.8MiB)
rocksdict-0.3.29-cp310-cp310-manylinux_2_28_x86_64.whl (4.0MiB)
rocksdict-0.3.29-cp310-cp310-musllinux_1_2_aarch64.whl (4.8MiB)
rocksdict-0.3.29-cp310-cp310-musllinux_1_2_x86_64.whl (5.1MiB)
rocksdict-0.3.29-cp310-cp310-win_amd64.whl (3.7MiB)
rocksdict-0.3.29-cp311-cp311-macosx_10_14_x86_64.whl (3.8MiB)
rocksdict-0.3.29-cp311-cp311-macosx_11_0_arm64.whl (3.5MiB)
rocksdict-0.3.29-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.9MiB)
rocksdict-0.3.29-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0MiB)
rocksdict-0.3.29-cp311-cp311-manylinux_2_28_aarch64.whl (3.8MiB)
rocksdict-0.3.29-cp311-cp311-manylinux_2_28_x86_64.whl (4.0MiB)
rocksdict-0.3.29-cp311-cp311-musllinux_1_2_aarch64.whl (4.8MiB)
rocksdict-0.3.29-cp311-cp311-musllinux_1_2_x86_64.whl (5.1MiB)
rocksdict-0.3.29-cp311-cp311-win_amd64.whl (3.7MiB)
rocksdict-0.3.29-cp312-cp312-macosx_10_14_x86_64.whl (3.8MiB)
rocksdict-0.3.29-cp312-cp312-macosx_11_0_arm64.whl (3.5MiB)
rocksdict-0.3.29-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.9MiB)
rocksdict-0.3.29-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0MiB)
rocksdict-0.3.29-cp312-cp312-manylinux_2_28_aarch64.whl (3.8MiB)
rocksdict-0.3.29-cp312-cp312-manylinux_2_28_x86_64.whl (4.0MiB)
rocksdict-0.3.29-cp312-cp312-musllinux_1_2_aarch64.whl (4.8MiB)
rocksdict-0.3.29-cp312-cp312-musllinux_1_2_x86_64.whl (5.1MiB)
rocksdict-0.3.29-cp312-cp312-win_amd64.whl (3.7MiB)
rocksdict-0.3.29-cp313-cp313-macosx_10_14_x86_64.whl (3.8MiB)
rocksdict-0.3.29-cp313-cp313-macosx_11_0_arm64.whl (3.5MiB)
rocksdict-0.3.29-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.9MiB)
rocksdict-0.3.29-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0MiB)
rocksdict-0.3.29-cp313-cp313-manylinux_2_28_aarch64.whl (3.8MiB)
rocksdict-0.3.29-cp313-cp313-manylinux_2_28_x86_64.whl (4.0MiB)
rocksdict-0.3.29-cp313-cp313-musllinux_1_2_aarch64.whl (4.8MiB)
rocksdict-0.3.29-cp313-cp313-musllinux_1_2_x86_64.whl (5.1MiB)
rocksdict-0.3.29-cp313-cp313-win_amd64.whl (3.7MiB)
rocksdict-0.3.29-cp314-cp314-macosx_10_14_x86_64.whl (3.9MiB)
rocksdict-0.3.29-cp314-cp314-macosx_11_0_arm64.whl (3.5MiB)
rocksdict-0.3.29-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.9MiB)
rocksdict-0.3.29-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0MiB)
rocksdict-0.3.29-cp314-cp314-manylinux_2_28_aarch64.whl (3.9MiB)
rocksdict-0.3.29-cp314-cp314-manylinux_2_28_x86_64.whl (4.0MiB)
rocksdict-0.3.29-cp314-cp314-musllinux_1_2_aarch64.whl (4.8MiB)
rocksdict-0.3.29-cp314-cp314-musllinux_1_2_x86_64.whl (5.1MiB)
rocksdict-0.3.29-cp314-cp314-win_amd64.whl (3.7MiB)
rocksdict-0.3.29-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.9MiB)
rocksdict-0.3.29-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0MiB)
rocksdict-0.3.29-cp37-cp37m-manylinux_2_28_aarch64.whl (3.8MiB)
rocksdict-0.3.29-cp37-cp37m-manylinux_2_28_x86_64.whl (4.0MiB)
rocksdict-0.3.29-cp37-cp37m-musllinux_1_2_aarch64.whl (4.8MiB)
rocksdict-0.3.29-cp37-cp37m-musllinux_1_2_x86_64.whl (5.1MiB)
rocksdict-0.3.29-cp37-cp37m-win_amd64.whl (3.7MiB)
rocksdict-0.3.29-cp38-cp38-macosx_10_14_x86_64.whl (3.8MiB)
rocksdict-0.3.29-cp38-cp38-macosx_11_0_arm64.whl (3.5MiB)
rocksdict-0.3.29-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.9MiB)
rocksdict-0.3.29-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0MiB)
rocksdict-0.3.29-cp38-cp38-manylinux_2_28_aarch64.whl (3.8MiB)
rocksdict-0.3.29-cp38-cp38-manylinux_2_28_x86_64.whl (4.0MiB)
rocksdict-0.3.29-cp38-cp38-musllinux_1_2_aarch64.whl (4.8MiB)
rocksdict-0.3.29-cp38-cp38-musllinux_1_2_x86_64.whl (5.1MiB)
rocksdict-0.3.29-cp38-cp38-win_amd64.whl (3.7MiB)
rocksdict-0.3.29-cp39-cp39-macosx_10_14_x86_64.whl (3.8MiB)
rocksdict-0.3.29-cp39-cp39-macosx_11_0_arm64.whl (3.5MiB)
rocksdict-0.3.29-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.9MiB)
rocksdict-0.3.29-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0MiB)
rocksdict-0.3.29-cp39-cp39-manylinux_2_28_aarch64.whl (3.8MiB)
rocksdict-0.3.29-cp39-cp39-manylinux_2_28_x86_64.whl (4.0MiB)
rocksdict-0.3.29-cp39-cp39-musllinux_1_2_aarch64.whl (4.8MiB)
rocksdict-0.3.29-cp39-cp39-musllinux_1_2_x86_64.whl (5.1MiB)
rocksdict-0.3.29-cp39-cp39-win_amd64.whl (3.7MiB)
rocksdict-0.3.29-pp311-pypy311_pp73-macosx_10_14_x86_64.whl (3.8MiB)
rocksdict-0.3.29-pp311-pypy311_pp73-macosx_11_0_arm64.whl (3.5MiB)
rocksdict-0.3.29-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.9MiB)
rocksdict-0.3.29-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0MiB)
rocksdict-0.3.29-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl (3.8MiB)
rocksdict-0.3.29-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl (4.0MiB)
rocksdict-0.3.29-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl (4.8MiB)
rocksdict-0.3.29-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl (5.1MiB)
rocksdict-0.3.29-pp311-pypy311_pp73-win_amd64.whl (3.7MiB)
No dependencies