1 unstable release

0.1.2 Oct 28, 2024

#1768 in Algorithms

Download history 909/week @ 2024-12-15 845/week @ 2024-12-22 695/week @ 2024-12-29 1217/week @ 2025-01-05 669/week @ 2025-01-12 474/week @ 2025-01-19 164/week @ 2025-01-26 616/week @ 2025-02-02 526/week @ 2025-02-09 487/week @ 2025-02-16 518/week @ 2025-02-23 459/week @ 2025-03-02 611/week @ 2025-03-09 640/week @ 2025-03-16 540/week @ 2025-03-23 554/week @ 2025-03-30

2,357 downloads per month

MIT/Apache

130KB
3.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() {
let config = Config::default();
  #
  # // remove ./foo if exists
  # let _ = std::fs::remove_file("./foo");
  let r = {
    let mut b = Builder::new(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–14MB
~164K SLoC