Crate satoridb

Crate satoridb 

Source
Expand description

SatoriDB: Billion-scale embedded vector database.

Two-tier architecture: HNSW routing in RAM + parallel bucket scanning on disk. Handles 1B+ vectors with 95%+ recall.

§Quick Start

use satoridb::SatoriDb;

fn main() -> anyhow::Result<()> {
    let db = SatoriDb::open("my_app")?;

    db.insert(1, vec![0.1, 0.2, 0.3])?;
    let results = db.query(vec![0.15, 0.25, 0.35], 10)?;

    Ok(()) // auto-shutdown on drop
}

§Configuration

use satoridb::SatoriDb;

fn main() -> anyhow::Result<()> {
    let db = SatoriDb::builder("my_app")
        .workers(4)
        .fsync_ms(100)
        .data_dir("/custom/path")
        .build()?;
}

§Core Operations

// Insert (rejects duplicates)
db.insert(1, vec![0.1, 0.2, 0.3])?;

// Query nearest neighbors
let results = db.query(vec![0.1, 0.2, 0.3], 10)?;

// Query with vectors returned
let results = db.query_with_vectors(vec![0.1, 0.2, 0.3], 10)?;

// Fetch by ID
let vectors = db.get(vec![1, 2, 3])?;

// Delete
db.delete(1)?;

// Flush to disk
db.flush()?;

§Async API

async fn example() -> anyhow::Result<()> {
    let db = SatoriDb::open("my_app")?;

    db.insert_async(1, vec![0.1, 0.2, 0.3]).await?;
    let results = db.query_async(vec![0.1, 0.2, 0.3], 10).await?;
    db.delete_async(1).await?;

    Ok(())
}

§Platform & Stability

  • Linux-only (requires io_uring, kernel 5.8+)
  • Pre-1.0: expect breaking API changes
  • Single-process embedded database

Re-exports§

pub use embedded::SatoriDb;
pub use embedded::SatoriDbBuilder;
pub use embedded::Stats;

Modules§

embedded
wal
Write-ahead log (Walrus) configuration and runtime handles.