1 unstable release

new 0.1.2 Oct 28, 2024

#520 in Data structures

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–15MB
~165K SLoC