Skip to content

MPCoreDeveloper/SharpCoreDB

SharpCoreDB Logo

SharpCoreDB

High-Performance Embedded Database for .NET 10

License: MIT .NET NuGet Sponsor


A high-performance, encrypted, embedded database engine for .NET 10 with B-tree indexes, SIMD-accelerated analytics, and 420x analytics speedup. Pure .NET implementation with enterprise-grade encryption and world-class analytics performance. Beats LiteDB in ALL 4 categories! 🏆

  • License: MIT
  • Platform: .NET 10, C# 14
  • Encryption: AES-256-GCM at rest (0% overhead, sometimes faster! ✅)
  • Analytics: 420x faster than LiteDB with SIMD vectorization ✅
  • Analytics: 15x faster than SQLite with SIMD vectorization ✅
  • SELECT: 2.3x faster than LiteDB for full table scans ✅
  • UPDATE: 4.6x faster than LiteDB for random updates ✅
  • INSERT: 1.21x faster than LiteDB for batch inserts ✅
  • B-tree Indexes: O(log n + k) range scans, ORDER BY, BETWEEN support ✅

🚀 Quickstart

Install:

dotnet add package SharpCoreDB

Use:

using Microsoft.Extensions.DependencyInjection;
using SharpCoreDB;

var services = new ServiceCollection();
services.AddSharpCoreDB();
var provider = services.BuildServiceProvider();
var factory = provider.GetRequiredService<DatabaseFactory>();

using var db = factory.Create("./app_db", "StrongPassword!");

// Create table with B-tree index
db.ExecuteSQL("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)");
db.ExecuteSQL("CREATE INDEX idx_age ON users(age) USING BTREE");

// Fast inserts
db.ExecuteSQL("INSERT INTO users VALUES (1, 'Alice', 30)");

// Fast queries with batch API
var rows = db.ExecuteQuery("SELECT * FROM users WHERE age > 25");

⭐ Key Features

Performance Excellence - Beats LiteDB in ALL Categories! 🏆

  • SIMD Analytics: 420x faster aggregations than LiteDB (20.7µs vs 8.54ms)
  • SIMD Analytics: 15x faster than SQLite (20.7µs vs 301µs)
  • SELECT Queries: 2.3x faster than LiteDB for full table scans (3.32ms vs 7.80ms)
  • UPDATE Operations: 4.6x faster than LiteDB (7.95ms vs 36.5ms)
  • INSERT Operations: 1.21x faster than LiteDB (5.28ms vs 6.42ms) ✅ NEW!
  • AVX-512/AVX2/SSE2: Hardware-accelerated analytics with SIMD vectorization
  • NativeAOT-Ready: Zero reflection, zero dynamic dispatch, aggressive inlining
  • Memory Efficient: 52x less memory than LiteDB for SELECT operations

🔒 Enterprise Security

  • Native AES-256-GCM: Hardware-accelerated encryption with 0% overhead (or faster!)
  • At-Rest Encryption: All data encrypted on disk
  • Zero Configuration: Automatic key management
  • GDPR/HIPAA Compliant: Enterprise-grade security

🏗️ Modern Architecture

  • Pure .NET: No P/Invoke dependencies, fully managed code
  • Multiple Storage Engines: PageBased (OLTP), Columnar (Analytics), AppendOnly (Logging)
  • Dual Index Types:
    • Hash indexes (O(1) point lookups)
    • B-tree indexes (O(log n) range queries, ORDER BY)
  • Async/Await: First-class async support throughout
  • DI Integration: Native Dependency Injection

🗃️ SQL Support

  • DDL: CREATE TABLE, DROP TABLE, CREATE INDEX, DROP INDEX
  • DML: INSERT, SELECT, UPDATE, DELETE, INSERT BATCH
  • Queries: WHERE, ORDER BY, LIMIT, OFFSET, BETWEEN
  • Aggregates: COUNT, SUM, AVG, MIN, MAX, GROUP BY
  • Advanced: JOINs, subqueries, complex expressions

📊 Performance Benchmarks (8 januari 2026)

Test Environment: Windows 11, Intel i7-10850H @ 2.70GHz (6 cores/12 threads), 16GB RAM, .NET 10
Benchmark Tool: BenchmarkDotNet v0.15.8
Note: All tests run in RELEASE mode with optimizations enabled. Comparison is vs LiteDB (both pure .NET)


🔥 1. ANALYTICS - WORLD CLASS PERFORMANCE

Test: SUM(salary) + AVG(age) on 5,000 records (columnar storage with SIMD)

Database Time vs SharpCoreDB Memory
SharpCoreDB (SIMD Columnar) 20.7-22.2 µs Baseline 0 B
SQLite (GROUP BY) 301-306 µs 14-15x slower 714 B
LiteDB (Aggregate) 8,540-8,670 µs 390-420x slower 11.2 MB

What Makes It Fast:

  • AVX-512 (16-wide), AVX2 (8-wide), SSE2 (4-wide) vectorization
  • Columnar storage for perfect SIMD utilization
  • Zero allocations during aggregation
  • Branch-free mask accumulation with BMI1 instructions
  • Hardware-accelerated vector operations

🔍 2. SELECT Performance - 2.3x FASTER THAN LITEDB

Test: Full table scan with WHERE clause (SELECT * FROM bench_records WHERE age > 30) on 5,000 records

Database Time vs SharpCoreDB Memory
SharpCoreDB PageBased 3.32-3.48 ms Baseline 220 KB
SQLite 692-699 µs 4.8x faster 722 B
AppendOnly 4.41-4.44 ms 1.3x slower 4.9 MB
LiteDB 7.80-7.99 ms 2.3x slower 11.4 MB

SharpCoreDB PageBased SELECT Performance:

  • 2.3x faster than LiteDB (3.32-3.48ms vs 7.80-7.99ms)
  • 52x less memory than LiteDB (220KB vs 11.4MB)
  • LRU Page Cache with 99%+ cache hit rate

✏️ 3. UPDATE Performance - 4.6x FASTER THAN LITEDB

Test: 500 random updates on 5,000 records

Database Time vs SharpCoreDB Memory
SQLite 591-636 µs 13.4x faster 198 KB
SharpCoreDB PageBased 7.95-7.97 ms Baseline 2.9 MB
AppendOnly 19.1-85.6 ms 2.4-10.8x slower 2.3-9.0 MB
LiteDB 36.5-37.9 ms 4.6x slower 29.8-30.7 MB

SharpCoreDB UPDATE Performance:

  • 4.6x faster than LiteDB (7.95-7.97ms vs 36.5-37.9ms)
  • 10.3x less memory than LiteDB (2.9MB vs 29.8-30.7MB)

📥 4. INSERT Performance - 1.21x FASTER THAN LITEDB 🎉

Test: Batch insert 1,000 records

Database Time vs SharpCoreDB Memory
SQLite 4.51-4.60 ms 1.17x faster 927 KB
SharpCoreDB PageBased 5.28-6.04 ms Baseline 5.1 MB
LiteDB 6.42-7.22 ms 1.21x slower 10.7 MB
AppendOnly 6.55-7.28 ms 1.24x slower 5.4 MB

INSERT Optimization Campaign Results (Januari 2026):

  • 3.2x speedup: From 17.1ms → 5.28ms (224% improvement)
  • LiteDB beaten: 1.21x faster (5.28ms vs 6.42ms)
  • Target achieved: <7ms target reached (5.28ms)
  • 2.1x less memory than LiteDB (5.1MB vs 10.7MB)

Optimization techniques applied:

  1. ✅ Hardware CRC32 (SSE4.2 instructions)
  2. ✅ Bulk buffer allocation (ArrayPool)
  3. ✅ Lock scope minimization
  4. ✅ SQL-free InsertBatch API
  5. ✅ Free Space Index (O(log n))
  6. ✅ Bulk B-tree insert
  7. ✅ TypedRowBuffer (zero Dictionary allocations)
  8. ✅ Scatter-Gather I/O (RandomAccess.Write)
  9. ✅ Schema-specific serialization
  10. ✅ SIMD string encoding (AVX2/SSE4.2)

🧭 Performance Summary vs LiteDB (Pure .NET Comparison)

Operation SharpCoreDB LiteDB Winner
Analytics (SIMD) 20.7-22.2 µs 8.54-8.67 ms SharpCoreDB 390-420x faster
SELECT (Full Scan) 3.32-3.48 ms 7.80-7.99 ms SharpCoreDB 2.3x faster
UPDATE 7.95-7.97 ms 36.5-37.9 ms SharpCoreDB 4.6x faster
INSERT 5.28-6.04 ms 6.42-7.22 ms SharpCoreDB 1.21x faster

🏆 SharpCoreDB wins ALL 4 categories!


🧭 Feature Comparison

Feature SharpCoreDB SQLite LiteDB
SIMD Analytics 420x faster
SELECT Performance 2.3x faster than LiteDB
UPDATE Performance 4.6x faster than LiteDB
INSERT Performance 1.21x faster than LiteDB
Zero-Copy SELECT StructRow API
Memory Efficiency 52x less (SELECT)
Native Encryption 0% overhead ⚠️ SQLCipher (paid)
Pure .NET ❌ (P/Invoke)
Hash Indexes O(1)
B-tree Indexes O(log n)
AVX-512/AVX2
NativeAOT Ready ⚠️ Limited
Async/Await Full ⚠️ Limited ⚠️ Limited
Storage Engines 3 types ⚠️ 1 type ⚠️ 1 type
License ✅ MIT ✅ Public Domain ✅ MIT

PERFECT FOR (Production-Ready):

  1. 🔥 Analytics & BI Applications - KILLER FEATURE

    • 420x faster than LiteDB for aggregations
    • 15x faster than SQLite for GROUP BY
    • Real-time dashboards with sub-25µs queries
    • SIMD-accelerated SUM/AVG/COUNT
    • Columnar storage for analytics
    • Time-series databases
  2. 🔍 High-Performance SELECT Queries

    • 2.3x faster than LiteDB for full table scans
    • 52x less memory than LiteDB
    • LRU page cache with 99%+ hit rate
  3. ⚡ High-Performance UPDATE Operations

    • 4.6x faster than LiteDB
    • 10.3x less memory than LiteDB
    • Efficient in-place updates with PageBased engine
  4. 📥 High-Performance INSERT Operations - NEW!

    • 1.21x faster than LiteDB
    • 2.1x less memory than LiteDB
    • Batch insert optimization (3.2x speedup achieved)
  5. 🔒 Encrypted Embedded Databases

    • AES-256-GCM with 0% overhead (or faster!)
    • GDPR/HIPAA compliance
    • Secure mobile/desktop apps
    • Zero key management
  6. 📊 High-Throughput Data Processing

    • StructRow API for zero-copy iteration
    • 10x less memory usage
    • Zero allocations during query processing
    • Type-safe, lazy-deserialized results

⚡ StructRow API Best Practices

CRITICAL: Use StructRow API for Maximum Performance

// ✅ CORRECT: Use StructRow for zero-copy performance
var results = db.SelectStruct("SELECT id, name, age FROM users WHERE age > 25");
foreach (var row in results)
{
    int id = row.GetValue<int>(0);        // Direct offset access
    string name = row.GetValue<string>(1); // Lazy deserialization
    int age = row.GetValue<int>(2);       // Type-safe access
    // ZERO allocations during iteration!
}

// ❌ WRONG: Dictionary API (much slower)
var results = db.Select("SELECT id, name, age FROM users WHERE age > 25");
foreach (var row in results)
{
    int id = (int)row["id"];        // Dictionary lookup + boxing
    string name = (string)row["name"]; // Dictionary lookup + boxing
    int age = (int)row["age"];       // Dictionary lookup + boxing
    // 200+ bytes per row allocated
}

📦 Additional Packages

Package Description
SharpCoreDB.EntityFrameworkCore Entity Framework Core provider
SharpCoreDB.Data.Provider ADO.NET provider
SharpCoreDB.Extensions Extension methods (Dapper, etc.)
SharpCoreDB.Serilog.Sinks Serilog sink for structured logging

📄 License

MIT License - see LICENSE for details.


🤝 Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.


💖 Sponsor

If you find SharpCoreDB useful, please consider sponsoring the project!


📊 Reproducible Benchmark Matrix (SQLite vs LiteDB vs SharpCoreDB)

Run the benchmarks yourself:

cd tests/SharpCoreDB.Benchmarks
# Runs StorageEngineComparisonBenchmark with all scenarios
DOTNET_EnableHWIntrinsic=1 dotnet run -c Release --filter StorageEngineComparisonBenchmark

Scenarios covered (all pre-populated with the same data set):

  • SQLite (baseline, single-file)
  • LiteDB (baseline, single-file)
  • SharpCoreDB Directory (PageBased) – unencrypted
  • SharpCoreDB Directory (PageBased) – AES-256 encrypted
  • SharpCoreDB SingleFile (.scdb) – unencrypted
  • SharpCoreDB SingleFile (.scdb) – AES-256 encrypted (fixed 32-byte key)

Fairness/optimal paths:

  • Page cache enabled (5k pages), WAL buffering on, validation off for benchmark runs
  • SingleFile uses DatabaseOptions with mmap enabled; encryption uses AES-256-GCM
  • Same schema and batch sizes as earlier results (Insert 1k, Update 500 random, Select with WHERE, Analytics columnar SIMD)

Use the produced BenchmarkDotNet.Artifacts/results/*-report-github.md to compare your run with ours.


Latest Benchmark Summary (Jan 11, 2026)

Environment: Windows 11, i7-10850H, .NET 10.0.1, BenchmarkDotNet 0.15.8

Settings: IterationCount=5, WarmupCount=2, Toolchain=InProcessEmit

Insert (1K rows)

  • PageBased: 7.63 ms (baseline, 2.01 MB alloc)
  • AppendOnly: 8.05 ms (1.96 MB)
  • SQLite: 4.62 ms (0.89 MB)
  • LiteDB: 7.73 ms (15.99 MB)
  • SCDB Dir (unencrypted): 7.69 ms (1.94 MB)
  • SCDB Dir (encrypted): 8.50 ms (1.94 MB)
  • SCDB Single (unencrypted): 13.41 ms (7.16 MB)
  • SCDB Single (encrypted): 13.74 ms (7.16 MB)

Select (WHERE age > 30, with idx_age)

  • PageBased: 1.52 ms (2.21 MB)
  • AppendOnly: 2.10 ms (1.91 MB)
  • SCDB Dir (unencrypted): 1.55 ms (2.21 MB)
  • SCDB Dir (encrypted): 1.53 ms (2.21 MB)
  • SCDB Single (unencrypted): 7.23 µs (4.9 KB)
  • SCDB Single (encrypted): 7.21 µs (4.9 KB)

Update (500 random rows)

  • PageBased: 7.44 ms (2.78 MB)
  • SCDB Dir (unencrypted): 7.41 ms (2.78 MB)
  • SCDB Dir (encrypted): 7.46 ms (2.79 MB)
  • SCDB Single (unencrypted): 7.86 ms (4.38 MB)
  • SCDB Single (encrypted): 8.05 ms (4.38 MB)
  • SQLite: 0.58 ms (193 KB)
  • AppendOnly: 366.51 ms (heavy GC, not suited for UPDATE)
  • LiteDB: 35.29 ms (25.34 MB)

Analytics (SUM/AVG)

  • Columnar SIMD: ~0.043 ns (micro-measure)
  • SQLite: 325.81 µs (714 B)
  • LiteDB: 7.84 ms (10.68 MB)

Comparison vs LiteDB

  • Insert (1K): SharpCoreDB PageBased ~7.63 ms vs LiteDB ~7.73 ms (near parity).
  • Update (500): SharpCoreDB ~7.4–8.0 ms vs LiteDB ~35.3 ms (~4.5x faster).
  • Select: SCDB Single ~7.2 µs (mmap), directory/page ~1.5 ms; LiteDB not measured here.
  • Analytics: Columnar SIMD >> LiteDB (µs vs ms).

Use Cases & Ideal Settings

See docs/UseCases.md for quick-start settings per scenario:

  • Web App (Concurrent Reads + OLTP Writes)
  • Reporting / Read-Heavy API
  • Bulk Import (ETL)
  • Analytics / BI
  • Desktop App (Single-User)
  • High-Concurrency API (Writes)

Tuning Recommendations

  • Single-file inserts:
    • WalBufferSizePages=4096
    • FileShareMode=None (exclusive)
    • EnableMemoryMapping=true
    • Disable encryption for perf runs when acceptable
  • Directory/Page configs:
    • EnablePageCache=true; PageCacheCapacity≥20000
    • UseGroupCommitWal=true; WalMaxBatchDelayMs≈5–10
    • Keep CREATE INDEX idx_age ON bench_records(age) for select tests

Notes

  • AppendOnly engine is optimized for insert/append; avoid UPDATE benchmarks.
  • Single-file SELECT benefits from memory-mapped I/O with very low allocations.

For full logs, see tests/SharpCoreDB.Benchmarks/BenchmarkDotNet.Artifacts/results/.

Sponsor this project

 

Packages

No packages published

Contributors 3

  •  
  •  
  •