1 unstable release

0.1.2 Oct 28, 2024

#1476 in Data structures

Download history 1049/week @ 2024-11-15 1300/week @ 2024-11-22 692/week @ 2024-11-29 813/week @ 2024-12-06 737/week @ 2024-12-13 917/week @ 2024-12-20 684/week @ 2024-12-27 1263/week @ 2025-01-03 714/week @ 2025-01-10 495/week @ 2025-01-17 213/week @ 2025-01-24 288/week @ 2025-01-31 659/week @ 2025-02-07 670/week @ 2025-02-14 495/week @ 2025-02-21 457/week @ 2025-02-28

2,370 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
~163K SLoC