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.2-cp314-cp314-win_amd64.whl (414.2 kB view details)

Uploaded CPython 3.14Windows x86-64

sombra-0.3.2-cp314-cp314-manylinux_2_34_x86_64.whl (620.3 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.34+ x86-64

sombra-0.3.2-cp314-cp314-macosx_11_0_arm64.whl (530.6 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

sombra-0.3.2-cp313-cp313-win_amd64.whl (417.8 kB view details)

Uploaded CPython 3.13Windows x86-64

sombra-0.3.2-cp313-cp313-manylinux_2_34_x86_64.whl (623.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

sombra-0.3.2-cp313-cp313-macosx_11_0_arm64.whl (531.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

sombra-0.3.2-cp312-cp312-win_amd64.whl (418.3 kB view details)

Uploaded CPython 3.12Windows x86-64

sombra-0.3.2-cp312-cp312-manylinux_2_34_x86_64.whl (624.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

sombra-0.3.2-cp312-cp312-macosx_11_0_arm64.whl (532.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

sombra-0.3.2-cp311-cp311-win_amd64.whl (413.2 kB view details)

Uploaded CPython 3.11Windows x86-64

sombra-0.3.2-cp311-cp311-manylinux_2_34_x86_64.whl (618.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

sombra-0.3.2-cp311-cp311-macosx_11_0_arm64.whl (530.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: sombra-0.3.2-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 414.2 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.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 513cc75665f514cae8e08d385564a05294afffd3aa8471fceeb656e5b2cc0204
MD5 3a64fa01b89e61cfabf93007302d292a
BLAKE2b-256 d168a86c74ebfe9e9641670676839379ebd33db5111428590e84a90ee05665f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sombra-0.3.2-cp314-cp314-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 0c35a78f922a25aa942fcd53930dd7ea0616209b76a68d4761e7a15c47ce1f95
MD5 3bae1291aa41447d168994de86e10696
BLAKE2b-256 cf9e89676e00c6ed5380117d71194bba33d3d45fba31377aacf97cd9efd4ee17

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sombra-0.3.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ae835a8c30c70634f2ba197019020641bd745e8e82e16d39ee9147703a789b33
MD5 b7a2e6899ba1e776adc6513b30e4594f
BLAKE2b-256 cbd9d6a2541e455510011377fbebf54c5b7814563723f340ccc7d6a2f2881ad1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sombra-0.3.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 417.8 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.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 19eb48820af6840ecf445c40fd519e1712512b8a47b73c3e70a10fb81d5e32c2
MD5 47b96ea4fc5ddfbe720055d1d8cef0b4
BLAKE2b-256 132d91be084238af8146671544958aeace865de1e05dc2cc004bf75e2af56802

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sombra-0.3.2-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 7997960f254dc09ccebaceb31b7f9aeb6978b36f8ec8928c51e0132c04150aac
MD5 4a5b2ec6ebc136eb32d0fbd71d7e9426
BLAKE2b-256 fd936844a51a1485f0e3960efc39dd0fb45aaae0a999938f886da0c3dd0c6499

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sombra-0.3.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 43f8ef9a7224a94a120ff1d49cd58efe96a7519492538399d7d2dd534b12f2c4
MD5 e41f194d59ab87d916e7d1c9c01e83aa
BLAKE2b-256 733e9a4d235908a79dd2aa40453fda3511282b2fcb27e5cbd5deee1fe3d7bd3c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sombra-0.3.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 418.3 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.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d04c6e746a1797410b08a6d374d32579c58dcd7ecff1807a40896f8145c90ba5
MD5 39178edc4a8d7f4db2ff3584df02cea3
BLAKE2b-256 be9320cbb956edaf08bb8a678a049ea2e82df656a34f0d873788c99a6ccb4fe6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sombra-0.3.2-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 721f3cfef2049ca0a28a1fff5739e4dd4e25c9f6ebf13345ac7b99dc99cfc7c6
MD5 4d4ea2392375f60de6488de514a1caee
BLAKE2b-256 f173b310723b225ae9471bf7dd513cd7d5a705f7d20d3b860731c33465a45c42

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sombra-0.3.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9fa9131f7e459c86f11296579b87ae9d3ddbae1651fb45fff2778613fae62947
MD5 43fe3b1539d332ed3c061678163f12a9
BLAKE2b-256 d3790c33205e2e28cc75bda26b4e3cf3ff6f3f6ed9d0102cfb001ecf52ba7715

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sombra-0.3.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 413.2 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.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c459133d6d319b9969963a00e9bc1cb5801a93ba99ee76a620eacf1828e3ad15
MD5 d77ec0f5feb6160a4e558e7a9e07b35d
BLAKE2b-256 90c99a8ff57b0a1b6ac0a69a2f12fca2fe20dc6f8da504d81d80934873230038

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sombra-0.3.2-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 3c93d44768ff7bc5b6416b780b41a89c68cd22a5e705b577ca5b179ee1c3834b
MD5 dc5d45024751f47f5b78dafc2bb177e0
BLAKE2b-256 26eca5b34a756499cdd324cbd90b9fe66c5cf4dd31b86178e2b8afb6b290af9a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sombra-0.3.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 835adedfd3c18fb6e0d3bca6de77ccef3fa159b73a20eabc8711c5f1aefb6b8a
MD5 056a0c9875eef546272f1940c0c8a167
BLAKE2b-256 c48f3760f075258f5510aaaae546f61912f807b2729bd16f2840f71f704c4458

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