rocksdb-rayon

Crates.iorocksdb-rayon
lib.rsrocksdb-rayon
version1.0.0
created_at2025-08-25 21:42:31.760416+00
updated_at2025-08-26 13:32:41.598372+00
descriptionAn implementation of rayon's ParallelIterator for rocksdb.
homepagehttps://gitlab.softwareheritage.org/swh/devel/rocksdb-rayon-rs
repositoryhttps://gitlab.softwareheritage.org/swh/devel/rocksdb-rayon-rs
max_upload_size
id1810191
size73,336
Software Heritage (swhmirror)

documentation

README

rocksdb-rayon

An implementation of rayon's ParallelIterator for rocksdb.

Examples

Listing all keys:

use rayon::prelude::*;
use rocksdb::DB;
use rocksdb_rayon::ParallelRocksdbKeyIterator;

let tempdir = tempfile::tempdir().expect("Could not create temporary directory");
let path = tempdir.path();
let db = DB::open_default(path).unwrap();

db.put(b"foo", b"foo value").unwrap();
db.put(b"bar", b"bar value").unwrap();
db.put(b"baz", b"baz value").unwrap();

assert_eq!(
    ParallelRocksdbKeyIterator::new(&db).collect::<Vec<_>>(),
    vec![
        (*b"bar").into(),
        (*b"baz").into(),
        (*b"foo").into(),
    ]
);

Listing all keys and values:

use rayon::prelude::*;
use rocksdb::DB;
use rocksdb_rayon::ParallelRocksdbItemIterator;

let tempdir = tempfile::tempdir().expect("Could not create temporary directory");
let path = tempdir.path();
let db = DB::open_default(path).unwrap();

db.put(b"foo", b"foo value").unwrap();
db.put(b"bar", b"bar value").unwrap();
db.put(b"baz", b"baz value").unwrap();

assert_eq!(
    ParallelRocksdbItemIterator::new(&db).collect::<Vec<_>>(),
    vec![
        ((*b"bar").into(), (*b"bar value").into()),
        ((*b"baz").into(), (*b"baz value").into()),
        ((*b"foo").into(), (*b"foo value").into()),
    ]
);

Listing a subset:

use rayon::prelude::*;
use rocksdb::{DB, ReadOptions};
use rocksdb_rayon::ParallelRocksdbItemIterator;

let tempdir = tempfile::tempdir().expect("Could not create temporary directory");
let path = tempdir.path();
let db = DB::open_default(path).unwrap();

db.put(b"foo", b"foo value").unwrap();
db.put(b"bar", b"bar value").unwrap();
db.put(b"baz", b"baz value").unwrap();
db.put(b"qux", b"qux value").unwrap();


assert_eq!(
    ParallelRocksdbItemIterator::new(&db)
        .with_iterator_factory(|db| {
            let mut options = ReadOptions::default();
            options.set_iterate_range(b"bar"..b"foo"); // right-exclusive
            db.raw_iterator_opt(options)
        })
        .collect::<Vec<_>>(),
    vec![
        ((*b"bar").into(), (*b"bar value").into()),
        ((*b"baz").into(), (*b"baz value").into()),
    ]
);
Commit count: 0

cargo fmt