10 releases
| 0.2.9 | Sep 12, 2025 |
|---|---|
| 0.2.8 | Aug 15, 2025 |
| 0.2.7 | Jul 24, 2025 |
| 0.1.2 | Oct 28, 2024 |
#416 in Data structures
2,097 downloads per month
125KB
2.5K
SLoC
rotbl
read-only table
lib.rs:
Rotbl is a read-only on disk table of key-value.
use rotbl::v001::{Builder, Config, Rotbl, RotblMeta, SeqMarked};
#[tokio::main(flavor = "multi_thread")]
async fn main() {
use std::path::PathBuf;
use rotbl::storage::impls::fs::FsStorage;
let config = Config::default();
#
# // remove ./foo if exists
# let _ = std::fs::remove_file("./foo");
let r = {
let storage = FsStorage::new(PathBuf::from("./"));
let mut b = Builder::new(storage, config, "./foo").unwrap();
// keys must be sorted
b.append_kv("bar", SeqMarked::new_normal(1, b"bar".to_vec())).unwrap();
b.append_kv("foo", SeqMarked::new_normal(2, b"foo".to_vec())).unwrap();
Arc::new(b.commit(RotblMeta::new(1, "hello")).unwrap())
};
// Read the value back
let val = r.get("foo").await.unwrap();
assert_eq!(val, Some(SeqMarked::new_normal(2, b"foo".to_vec())));
// Scan the table
let kvs = r.range(..).try_collect::<Vec<_>>().await.unwrap();
assert_eq!(kvs, vec![
("bar".to_string(), SeqMarked::new_normal(1, b"bar".to_vec())),
("foo".to_string(), SeqMarked::new_normal(2, b"foo".to_vec())),
]);
}
Dependencies
~7–12MB
~201K SLoC