heed 0.10.3

A fully typed LMDB/MDBX wrapper with minimum overhead
Documentation

Crate heed is a high-level wrapper of LMDB, high-level doesn't mean heavy (think about Rust).

It provides you a way to store types in LMDB without any limit and with a minimal overhead as possible, relying on the zerocopy library to avoid copying bytes when that's unnecessary and the serde library when this is unavoidable.

The Lightning Memory-Mapped Database (LMDB) directly maps files parts into main memory, combined with the zerocopy library allows us to safely zero-copy parse and serialize Rust types into LMDB.

Examples

Discern let you open a database, that will support some typed key/data and ensures, at compile time, that you'll write those types and not others.

use std::fs;
use std::path::Path;
use heed::{EnvOpenOptions, Database};
use heed::types::*;

# fn main() -> Result<(), Box<dyn std::error::Error>> {
fs::create_dir_all(Path::new("target").join("zerocopy.mdb"))?;
let env = EnvOpenOptions::new().open(Path::new("target").join("zerocopy.mdb"))?;

// we will open the default unamed database
let db: Database<Str, OwnedType<i32>> = env.create_database(None)?;

// opening a write transaction
let mut wtxn = env.write_txn()?;
db.put(&mut wtxn, "seven", &7)?;
db.put(&mut wtxn, "zero", &0)?;
db.put(&mut wtxn, "five", &5)?;
db.put(&mut wtxn, "three", &3)?;
wtxn.commit()?;

// opening a read transaction
// to check if those values are now available
let mut rtxn = env.read_txn()?;

let ret = db.get(&rtxn, "zero")?;
assert_eq!(ret, Some(0));

let ret = db.get(&rtxn, "five")?;
assert_eq!(ret, Some(5));
# Ok(()) }