block-db 0.2.0

Local, multi-threaded, durable byte DB.
Documentation
use block_db::{batch::BatchResult, BlockDB};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut block_db = BlockDB::open("./db", None).await?;

    // Write bytes
    let block_key_one = block_db.write(b"Hello").await?;

    // Free bytes
    let freed_bytes = block_db.free(&block_key_one).await?;

    // 4_096 (Default `chunk_size`)
    println!("{freed_bytes}");

    // Write bytes in the previously freed space
    let block_key_two = block_db.write(b"World!").await?;

    // Batch writes then frees
    let BatchResult {
        freed_bytes,
        new_block_keys,
    } = block_db
        .batch(vec![b"Hallo", b"Welt!"], vec![&block_key_two])
        .await?;

    // 4_096 (Default `chunk_size`)
    println!("{freed_bytes}");

    // Read Bytes

    // None
    println!("{:?}", block_db.read(&block_key_one).await?);

    // None
    println!("{:?}", block_db.read(&block_key_two).await?);

    // Some(b"Hallo")
    println!("{:?}", block_db.read(&new_block_keys[0]).await?);

    // Some(b"Welt!")
    println!("{:?}", block_db.read(&new_block_keys[1]).await?);

    // Compact `DataFile`s by removing all free `DataBlock`s
    block_db.compact_data_files().await?;

    Ok(())
}