#convert #await #lbasedb

nightly lbasedb

Low level DBMS in Rust focusing on datasets

6 releases

Uses new Rust 2024

new 0.1.7 Apr 10, 2025
0.1.6 Mar 6, 2025
0.1.2 Feb 25, 2025

#683 in Database interfaces

Download history 183/week @ 2025-02-15 193/week @ 2025-02-22 245/week @ 2025-03-01 68/week @ 2025-03-08 4/week @ 2025-03-15 21/week @ 2025-03-22 18/week @ 2025-03-29

167 downloads per month

MIT license

52KB
959 lines

lbasedb

lbasedb is a powerful low level DBMS that is focused on dataset structure. The algorithms are optimized for the compact data storage and for high performance on get and append operations. Particularly, due to this, deleting or indexing are not supported. The allowed data types are also limited (integers, floats and bytes) for making easy integration with C-like or similar common interfaces (like Python, CUDA, JSON and so on). The database has asynchronous access to the entities powered by tokio. It is supposed to be used for the data that have billions and more records and thousands columns of simple data types that must be appended without extra overhead.

Installation

cargo add lbasedb

Usage example:

use lbasedb::prelude::*;

let conn = Conn::new("./tmp/db").await?;

if !conn.feed_exists("xyz").await {
    conn.feed_add("xyz").await?;
}

println!(
    "Feed list: {:?}", 
    conn.feed_list().await.iter()
        .map(|i| i.get_name())
        .collect::<Vec<String>>()
);

if !conn.col_exists("xyz", "x").await {
    conn.col_add("xyz", "x", "Int64").await?;
}

if !conn.col_exists("xyz", "y").await {
    conn.col_add("xyz", "y", "Float64").await?;
}

println!(
    "Col list: {:?}", 
    conn.col_list("xyz").await?.iter()
        .map(|i| i.get_name())
        .collect::<Vec<String>>()
);

if conn.size_get("xyz").await? == 0 {
    let ds: Dataset = std::collections::HashMap::from([
        ("x".to_string(), vec![Dataunit::I(2), Dataunit::I(5)]),
        ("y".to_string(), vec![Dataunit::F(2.15), Dataunit::F(5.55)]),
    ]);
    conn.data_push("xyz", &ds).await?;
}

println!("Size: {:?}", conn.size_get("xyz").await?);

let ds = conn.data_get("xyz", 0, 2, 
                       &["x".to_string(), "y".to_string()]).await?;
println!("ds = {:?}", ds);

Dependencies

~4–10MB
~92K SLoC