heed & heed3
Rust-centric LMDB abstractions with minimal overhead. These libraries enable the storage of various Rust types within LMDB, extending support to include Serde-compatible types. It supports not only the LMDB mdb.master branch but also the mdb.master3 branch, which features encryption-at-rest.
Simple Example Usage
Here is an example on how to store and read entries into LMDB in a safe and ACID way. For usage examples, see heed/examples/. To see more advanced usage techniques go check our Cookbook.
use std::fs; use std::path::Path; use heed::{EnvOpenOptions, Database}; use heed::types::*; fn main() -> Result<(), Box<dyn std::error::Error>> { let env = unsafe { EnvOpenOptions::new().open("my-first-db")? }; // We open the default unnamed database let mut wtxn = env.write_txn()?; let db: Database<Str, U32<byteorder::NativeEndian>> = env.create_database(&mut wtxn, None)?; // We open a write transaction 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()?; // We open 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(()) }
Working with two Crates: heed and heed3
The heed and heed3 crates manage a shared codebase. Within the heed3 folder, you can find the Cargo.toml specific to the heed3 crate.
To facilitate work on heed3, utilize the convert-to-heed3.sh script.
This script conveniently moves the heed3/Cargo.toml file to the heed/ folder, updates the heed:: references to heed3::, and generates a commit for easy rollback if needed.
Building from Source
You can use this command to clone the repository:
git clone --recursive https://github.com/meilisearch/heed.git
cd heed
cargo buildHowever, if you already cloned it and forgot to initialize the submodules, execute the following command:
git submodule update --init
