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;