Skip to main content

A high-performance graph database with ACID transactions

Project description

Sombra - High-Performance Graph Database

Crates.io Documentation CI License: MIT

⚠️ Alpha Software: Sombra is under active development. APIs may change, and the project is not yet recommended for production use. Feedback and contributions are welcome!

Sombra is a file-based graph database inspired by SQLite's single-file architecture. Built in Rust with a focus on reliability, performance, and ACID transactions.

Features

Core Features

  • Property Graph Model: Nodes, edges, and flexible properties
  • Single File Storage: SQLite-style database files
  • ACID Transactions: Full transactional support with rollback
  • Write-Ahead Logging: Crash-safe operations
  • Page-Based Storage: Efficient memory-mapped I/O

Performance Features ✨ NEW

  • Label Index: Fast label-based queries with O(1) lookup
  • LRU Node Cache: 90% hit rate for repeated reads
  • B-tree Primary Index: 25-40% memory reduction, better cache locality
  • Optimized Graph Traversals: 18-23x faster than SQLite for graph operations
  • Performance Metrics: Real-time monitoring of cache, queries, and traversals
  • Scalability Testing: Validated for 100K+ node graphs

Language Support

  • Rust API: Core library with full feature support
  • TypeScript/Node.js API: Complete NAPI bindings for JavaScript/TypeScript
  • Python API: PyO3 bindings with native performance (build with maturin -F python)
  • Cross-Platform: Linux, macOS, and Windows support

Reliability Features

  • Comprehensive Error Handling: All errors handled gracefully with Result types
  • Corruption Resistance: Safe deserialization with comprehensive validation
  • Structured Logging: Full tracing support with tracing crate
  • Health Monitoring: Built-in health checks and extended metrics
  • Graceful Shutdown: Clean database closure with WAL checkpoint
  • Resource Limits: Configurable limits for database size, WAL, and transactions
  • Database Inspector: CLI tools for inspection and repair

Testing & Quality

  • 100+ Comprehensive Tests: Unit, integration, stress, and fuzz tests
  • Corruption Fuzzing: 10,000+ scenarios tested without crashes
  • Multi-Platform CI: Linux, macOS, Windows with full test coverage
  • Zero Clippy Warnings: Strict linting with -D warnings
  • Benchmark Suite: Performance regression testing

Quick Start

Rust API

use sombra::prelude::*;

// Open or create a database
let mut db = GraphDB::open("my_graph.db")?;

// Use transactions for safe operations
let mut tx = db.begin_transaction()?;

// Add nodes and edges
let user = tx.add_node(Node::new(0))?;
let post = tx.add_node(Node::new(1))?;
tx.add_edge(Edge::new(user, post, "AUTHORED"))?;

// Commit to make changes permanent
tx.commit()?;

// Query the graph
let neighbors = db.get_neighbors(user)?;
println!("User {} authored {} posts", user, neighbors.len());

// Create property indexes for fast queries
db.create_property_index("User", "age")?;
let users_age_30 = db.find_nodes_by_property("User", "age", &PropertyValue::Int(30))?;
println!("Found {} users aged 30", users_age_30.len());

TypeScript/Node.js API

import { SombraDB, SombraPropertyValue } from 'sombradb';

const db = new SombraDB('./my_graph.db');

const createProp = (type: 'string' | 'int' | 'float' | 'bool', value: any): SombraPropertyValue => ({
  type,
  value
});

const alice = db.addNode(['Person'], {
  name: createProp('string', 'Alice'),
  age: createProp('int', 30)
});

const bob = db.addNode(['Person'], {
  name: createProp('string', 'Bob'),
  age: createProp('int', 25)
});

const knows = db.addEdge(alice, bob, 'KNOWS', {
  since: createProp('int', 2020)
});

const aliceNode = db.getNode(alice);
console.log('Alice:', aliceNode);

const neighbors = db.getNeighbors(alice);
console.log(`Alice has ${neighbors.length} connections`);

const bfsResults = db.bfsTraversal(alice, 3);
console.log('BFS traversal:', bfsResults);

const tx = db.beginTransaction();
try {
  const charlie = tx.addNode(['Person'], {
    name: createProp('string', 'Charlie')
  });
  tx.addEdge(alice, charlie, 'KNOWS');
  tx.commit();
} catch (error) {
  tx.rollback();
  throw error;
}

db.flush();
db.checkpoint();

Python API

from sombra import SombraDB

db = SombraDB("./my_graph.db")

alice = db.add_node(["Person"], {"name": "Alice", "age": 30})
bob = db.add_node(["Person"], {"name": "Bob", "age": 25})

db.add_edge(alice, bob, "KNOWS", {"since": 2020})

node = db.get_node(alice)
print(f"Alice -> {node.labels}, properties={node.properties}")

neighbors = db.get_neighbors(alice)
print(f"Alice has {len(neighbors)} connections")

tx = db.begin_transaction()
try:
    charlie = tx.add_node(["Person"], {"name": "Charlie"})
    tx.add_edge(alice, charlie, "KNOWS")
    tx.commit()
except Exception:
    tx.rollback()
    raise

Installation

Rust

cargo add sombra

TypeScript/Node.js

npm install sombradb

Python

# Install from PyPI (coming soon)
pip install sombra

# Or build from source
pip install maturin
maturin build --release -F python
pip install target/wheels/sombra-*.whl

CLI Tools

Install the unified CLI for database inspection, repair, and verification:

# Via Cargo (recommended)
cargo install sombra

# The 'sombra' command will be available system-wide
sombra --help

The CLI is also bundled with npm and pip installations:

# Via npm
npm install -g sombradb
sombra inspect mydb.db info

# Via pip
pip install sombra
sombra verify mydb.db

See the CLI documentation for complete usage guide.

Architecture

Sombra is built in layers:

  1. Storage Layer: Page-based file storage with 8KB pages
  2. Pager Layer: In-memory caching and dirty page tracking
  3. WAL Layer: Write-ahead logging for crash safety
  4. Transaction Layer: ACID transaction support
  5. Graph API: High-level graph operations
  6. NAPI Bindings: TypeScript/Node.js interface layer

Documentation

Getting Started

Language-Specific Guides

Technical Documentation

Development

Testing

# Run all tests
cargo test

# Run transaction tests specifically
cargo test transactions

# Run smoke tests
cargo test smoke

# Run stress tests
cargo test stress

Performance

Phase 1 Optimizations ✅ COMPLETE

Sombra now includes production-ready performance optimizations:

Optimization Improvement Status
Label Index Fast O(1) label queries ✅ Complete
Node Cache 90% hit rate for repeated reads ✅ Complete
B-tree Index 25-40% memory reduction ✅ Complete
Metrics System Real-time monitoring ✅ Complete

Benchmark Results (100K nodes):

Node Lookups:    ~1.5M ops/sec
Neighbor Queries: ~9.9M ops/sec  
Index Memory:    25% reduction (3.2MB → 2.4MB)
Cache Hit Rate:  90% after warmup

Graph Traversal Performance (vs SQLite):

  • Medium Dataset: 7,778 ops/sec vs 452 ops/sec (18x faster)
  • Large Dataset: 1,092 ops/sec vs 48 ops/sec (23x faster)

Running Benchmarks

# Index performance comparison
cargo bench --bench index_benchmark --features benchmarks

# BFS traversal performance
cargo bench --bench small_read_benchmark --features benchmarks

# Scalability testing (50K-500K nodes)
cargo bench --bench scalability_benchmark --features benchmarks

# Performance metrics demo
cargo run --example performance_metrics_demo --features benchmarks

Current Status

Version 0.3.2 - Alpha

Core Features:

  • Core graph operations (nodes, edges, properties)
  • Page-based storage with B-tree indexing (25-40% memory savings)
  • Write-ahead logging (WAL) for crash recovery
  • ACID transactions with rollback support
  • Label secondary index with O(1) lookup
  • LRU node cache (90% hit rate)
  • Adjacency indexing for fast traversals (18-23x faster than SQLite)
  • Property-based indexes for O(log n) queries
  • Multi-reader concurrency support (100+ concurrent readers)

Quality & Reliability:

  • ✅ Comprehensive error handling with graceful degradation
  • ✅ Corruption resistance - 10,000+ fuzzing scenarios
  • ✅ Structured logging - Full tracing support
  • ✅ Health monitoring - Extended metrics and health checks
  • ✅ Graceful shutdown - Clean close() method
  • ✅ Resource limits - Configurable size/timeout limits
  • ✅ CLI tools - Inspector and repair utilities
  • ✅ 100+ tests passing - Unit, integration, stress, fuzz
  • ✅ Complete documentation - API docs, guides, examples
  • ✅ Multi-platform CI - Linux, macOS, Windows

Language Bindings:

  • ✅ Rust API (native)
  • ✅ Python bindings (PyO3)
  • ✅ TypeScript/Node.js bindings (NAPI)

🚀 Roadmap to Production (v1.0)

In Progress:

  • Real-world testing and feedback collection
  • API stabilization and versioning strategy
  • Performance optimization and profiling

Planned Features:

  • Page-level checksums for data integrity validation
  • MVCC for improved concurrency
  • Query planner with cost-based optimization
  • Replication and high availability
  • Backup/restore utilities
  • Performance dashboard
  • Production deployment case studies

See CHANGELOG.md for detailed release notes and docs/roadmap.md for future plans.

Examples

See the tests/ directory for comprehensive examples:

  • tests/smoke.rs - Basic usage patterns
  • tests/stress.rs - Performance and scalability
  • tests/transactions.rs - Transaction usage examples

License

This project is open source. See LICENSE for details.

Contributing

See Contributing Guidelines for information on how to contribute to Sombra.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

sombra-0.3.3-cp314-cp314-win_amd64.whl (413.7 kB view details)

Uploaded CPython 3.14Windows x86-64

sombra-0.3.3-cp314-cp314-manylinux_2_34_x86_64.whl (619.9 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.34+ x86-64

sombra-0.3.3-cp314-cp314-macosx_11_0_arm64.whl (530.2 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

sombra-0.3.3-cp313-cp313-win_amd64.whl (417.3 kB view details)

Uploaded CPython 3.13Windows x86-64

sombra-0.3.3-cp313-cp313-manylinux_2_34_x86_64.whl (623.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

sombra-0.3.3-cp313-cp313-macosx_11_0_arm64.whl (531.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

sombra-0.3.3-cp312-cp312-win_amd64.whl (417.8 kB view details)

Uploaded CPython 3.12Windows x86-64

sombra-0.3.3-cp312-cp312-manylinux_2_34_x86_64.whl (623.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

sombra-0.3.3-cp312-cp312-macosx_11_0_arm64.whl (531.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

sombra-0.3.3-cp311-cp311-win_amd64.whl (412.8 kB view details)

Uploaded CPython 3.11Windows x86-64

sombra-0.3.3-cp311-cp311-manylinux_2_34_x86_64.whl (618.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

sombra-0.3.3-cp311-cp311-macosx_11_0_arm64.whl (530.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file sombra-0.3.3-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: sombra-0.3.3-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 413.7 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for sombra-0.3.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 2d6eac3ccc08ec860a3891ddf85263eecb9f362cb213e2eca50e84ac969bde44
MD5 d8f7b5a78b434ce45b14432c2f562738
BLAKE2b-256 c58cde280549ce4e0f92f35107d0d007558d0d6bacd1c3c2a7a9c816f8be673f

See more details on using hashes here.

File details

Details for the file sombra-0.3.3-cp314-cp314-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for sombra-0.3.3-cp314-cp314-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 ccc4455e2025a15dcc0269f32e651da5a9d28f22e761e8c9fd5f66d52bf542f5
MD5 72d299545c55f75c96002c7250185691
BLAKE2b-256 e29a050b3e778ce51ecedfde5f305ba4d87d26cd70d4f8bffc3fad58c1d47596

See more details on using hashes here.

File details

Details for the file sombra-0.3.3-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sombra-0.3.3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 24fbeeef966af35634917cf0b61b531851afbf9851018ca79cdf1bf8b9d7701b
MD5 3f4732572e406a35cf884c8e71c93177
BLAKE2b-256 bd3fad024a5b75b8cfe163d80e95dd6cb91e402983e00d58690267e321fb6bec

See more details on using hashes here.

File details

Details for the file sombra-0.3.3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: sombra-0.3.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 417.3 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for sombra-0.3.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a33bd3117180b7a4c05849613d73b4de21c562b50853089587271835f0bd56a5
MD5 5e3d10112fa09fe59e9f61cf4c009524
BLAKE2b-256 7355211f9f6f8a63fff6a2ce0ee8a87691a624fde54881136792c4833f45cfdd

See more details on using hashes here.

File details

Details for the file sombra-0.3.3-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for sombra-0.3.3-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 676edf35a86bc6e10f57d8d9c92ddf1901941fc7b48c60442c551c8051dc7ecc
MD5 06c9090a99c2758c544ac8ed8dfc00c1
BLAKE2b-256 0eb8ccde1a128e4ea78a4ac5f0fc0e3351895d3e3d9eb6968d04f37df9ab818e

See more details on using hashes here.

File details

Details for the file sombra-0.3.3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sombra-0.3.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9e6b23939f276e3d212316805a39cf3751c37db7c4d6d86f980bc44b25f9cdec
MD5 8c9a179d1d0bed5dfacf67e4a8b8d08b
BLAKE2b-256 e3bfef3cbbc0dc79190b69e879b18770331ba549b4afd4205aa3670edb79762e

See more details on using hashes here.

File details

Details for the file sombra-0.3.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: sombra-0.3.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 417.8 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for sombra-0.3.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a54f87a53da9025dbb668162e2969ff34490a31f52551ae519a7d4286332d66d
MD5 c14907f4483784cb60d61c48a9afb3c5
BLAKE2b-256 621fc1635da490869c36eff905b3160ed57ca62d07f7db9ab101afd78744780f

See more details on using hashes here.

File details

Details for the file sombra-0.3.3-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for sombra-0.3.3-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 53240821cedd978b8206db22d4095ee31152b6e5265ed7164217a6ebe332f05b
MD5 65525735bfd814b6a110eb00b3f72fc2
BLAKE2b-256 cb1a210db40f4851315bae408a1c31691eb68eba3d86862f7123f56218263243

See more details on using hashes here.

File details

Details for the file sombra-0.3.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sombra-0.3.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 66ed9dcc3a48d3eba236bba36887e064921260c0143eb0c6c9a1dc5431cb0b09
MD5 4bee4ae464921f9936aadd113dbae475
BLAKE2b-256 8ad171f41d308766bb1923fbe1c176e072665f0c67dfc60590ed76c7646bcec6

See more details on using hashes here.

File details

Details for the file sombra-0.3.3-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: sombra-0.3.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 412.8 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for sombra-0.3.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 69c9918102df9df9b5b93eddda82eaa6f80dd5af6a76336c25805ea48bee0139
MD5 f20358af5895e92c6a60ba2bfe52cbd3
BLAKE2b-256 6adf995e1c0e1c08a2987c4f755b91ac7e6f4040c62489ae989362a9c20e770d

See more details on using hashes here.

File details

Details for the file sombra-0.3.3-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for sombra-0.3.3-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 27552461575c712431b476451b184dada815c3e417a684c1a421398e6a463e39
MD5 80a5a2e40869a051350fa63b123637a2
BLAKE2b-256 cedd1bf972452d38e446baa6dd3898f652d7657f46f97e5a81e21db2465a2219

See more details on using hashes here.

File details

Details for the file sombra-0.3.3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sombra-0.3.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bc22b57e474f96314824f94b4628247c9cc2301dad8603af33699d959c0ed334
MD5 e89c4cc3dfb8dfa2ee6d609a3c7bb8d8
BLAKE2b-256 b4d014a69db98defe92014684ba1499ce51c3eb5ca8a5c0bf74da72cc3639a39

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page