Skip to content

Fully typed LMDB wrappers with minimum overhead 🐦

License

Notifications You must be signed in to change notification settings

meilisearch/heed

Folders and files

NameName
Last commit message
Last commit date

Latest commit

5a10a00 Β· Mar 26, 2025
Mar 19, 2025
Nov 26, 2023
Aug 18, 2024
Mar 10, 2025
Mar 19, 2025
Mar 13, 2025
Mar 11, 2025
Mar 11, 2025
Sep 15, 2022
Feb 19, 2025
Mar 1, 2022
Nov 30, 2024
Jan 10, 2025
Mar 26, 2025
Mar 13, 2025

Repository files navigation

heed & heed3

License Crates.io Docs dependency status Build Discord

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 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 build

However, if you already cloned it and forgot to initialize the submodules, execute the following command:

git submodule update --init