Rocksdb Python Binding
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
Installation
Wheels available for macOS amd64/arm64, linux amd64/arm64, and windows amd64.
pip install rocksdictfor rocksdb backend, thenfrom rocksdict import Rdictpip install speedictfor speedb backend, thenfrom speedict import Rdict
Introduction
This library has two purposes.
- As an on-disk key-value storage solution for Python.
- 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 (withPickle). -
Raw mode (
options=Options(raw_mode=True)), which allows storing onlybytes.
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
0.3.29
Dec 01, 2025
0.3.28
Nov 09, 2025
0.3.27
May 27, 2025
0.3.26
Apr 26, 2025
0.3.25
Dec 14, 2024
0.3.24
Oct 31, 2024
0.3.24b3
Jun 25, 2024
0.3.24b2
May 16, 2024
0.3.24b1
May 15, 2024
0.3.24b0
May 15, 2024
0.3.23
Mar 30, 2024
0.3.22
Mar 02, 2024
0.3.21
Feb 20, 2024
0.3.20
Dec 05, 2023
0.3.19
Dec 04, 2023
0.3.18
Nov 24, 2023
0.3.17
Nov 09, 2023
0.3.16
Nov 09, 2023
0.3.15
Oct 20, 2023
0.3.14
Sep 27, 2023
0.3.13
May 27, 2023
0.3.12
May 18, 2023
0.3.11
Apr 03, 2023
0.3.10
Mar 24, 2023
0.3.9
Mar 22, 2023
0.3.8
Mar 21, 2023
0.3.7
Feb 24, 2023
0.3.6
Jan 29, 2023
0.3.5
Nov 11, 2022
0.3.4
Nov 06, 2022
0.3.3
Nov 05, 2022
0.3.2
Nov 05, 2022
0.3.1
Nov 04, 2022
0.3.0
Nov 03, 2022
0.2.16
Jan 10, 2022
0.2.15
Jan 10, 2022
0.2.14
Jan 06, 2022
0.2.13
Jan 03, 2022
0.2.12
Jan 03, 2022
0.2.11
Jan 02, 2022
0.2.10
Jan 02, 2022
0.2.9
Jan 02, 2022
0.2.8
Jan 01, 2022
0.2.7
Jan 01, 2022
0.2.5
Dec 31, 2021
0.2.4
Dec 31, 2021
0.2.3
Dec 30, 2021
0.2.2
Dec 30, 2021
0.2.1
Dec 29, 2021
0.2.0
Dec 29, 2021
0.1.2
Nov 18, 2021
0.1.1
Nov 14, 2021
0.1.0
Nov 14, 2021
Wheel compatibility matrix
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