Crates.io | rocksdb-rayon |
lib.rs | rocksdb-rayon |
version | 1.0.0 |
created_at | 2025-08-25 21:42:31.760416+00 |
updated_at | 2025-08-26 13:32:41.598372+00 |
description | An implementation of rayon's ParallelIterator for rocksdb. |
homepage | https://gitlab.softwareheritage.org/swh/devel/rocksdb-rayon-rs |
repository | https://gitlab.softwareheritage.org/swh/devel/rocksdb-rayon-rs |
max_upload_size | |
id | 1810191 |
size | 73,336 |
An implementation of rayon's ParallelIterator
for rocksdb.
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()),
]
);