Features
A purpose-built HTAP engine from storage to wire protocol.
Columnar storage engine
DoDB stores data in Structure-of-Arrays (SoA) format — each column is a contiguous, 64-byte aligned array in memory. This layout enables maximum SIMD throughput because sequential column values are adjacent in cache lines.
Memory is managed through mmap with arena allocation. No malloc, no garbage collection, no fragmentation. Column arrays grow by doubling and are always aligned for AVX-512 compatibility.
VARCHAR handling
32-byte inline cells: 22 bytes inline + overflow heap for longer strings. Short strings never chase a pointer.
Null bitmaps
Packed bit arrays for nullable columns. SIMD-friendly null checking with bitwise operations.
Type system
13 types: INT8/16/32/64, UINT8/16/32/64, FLOAT32/64, BOOL, VARCHAR, TIMESTAMP.
SIMD query kernels
Every performance-critical operation is hand-written in assembly with explicit SIMD intrinsics. No compiler auto-vectorization — every instruction is deliberate.
Predicate filters
Type-specific comparison with bitmask generation. Process 8-32 values per instruction depending on type width.
Aggregations
SUM, COUNT, MIN, MAX with horizontal reduction. 7B+ rows/sec on INT32 aggregates.
Hash computation
Vectorized hashing for GROUP BY and JOIN operations using SIMD multiply-and-shift.
Gather operations
Selective column reads using index arrays. Avoids materializing filtered result sets.
String comparison
SIMD-accelerated VARCHAR filtering with inline/overflow-aware comparison paths.
COUNT(*)
Stored row count. No scan required. 37,000x faster than PostgreSQL.
SQL engine
Complete SQL implementation with recursive descent parser and vectorized batch executor, written entirely in x86-64 and AArch64 assembly.
Supported statements
Query features
| Type | Size | Range |
|---|---|---|
| INT8 | 1 byte | -128 to 127 |
| INT16 | 2 bytes | -32,768 to 32,767 |
| INT32 | 4 bytes | -2B to 2B |
| INT64 | 8 bytes | Full 64-bit signed |
| UINT8 | 1 byte | 0 to 255 |
| UINT16 | 2 bytes | 0 to 65,535 |
| UINT32 | 4 bytes | 0 to 4B |
| UINT64 | 8 bytes | Full 64-bit unsigned |
| FLOAT32 | 4 bytes | IEEE 754 single |
| FLOAT64 | 8 bytes | IEEE 754 double |
| BOOL | 1 byte | true / false |
| VARCHAR | 32 bytes | 22 inline + overflow |
| TIMESTAMP | 8 bytes | Unix epoch microseconds |
ACID transactions
Atomicity
Transactions are all-or-nothing. Partial writes are rolled back on abort or crash.
Consistency
Schema constraints enforced at write time. Type-checked column operations.
Isolation
MVCC snapshot isolation. Readers never block writers. Consistent point-in-time reads.
Durability
Write-ahead log with fsync. Crash recovery via WAL replay on startup.
Real-time subscriptions
Subscribe to any SQL query over WebSocket. Get the initial result set immediately, then receive incremental deltas as the underlying data changes.
Query subscriptions
Subscribe to arbitrary SELECT queries. Filter, join, and aggregate — all reactive.
Delta streaming
Only changed rows are sent. Inserts and deletes relative to the previous result set.
Binary protocol
Compact binary wire format for low-overhead updates. JSON text protocol also supported.
REST API
Full CRUD plus raw SQL execution. JWT and API key authentication. Powered by Rust with axum and tokio.
| Method | Endpoint | Description |
|---|---|---|
| GET | /tables/:name | List all rows |
| GET | /tables/:name/:id | Get row by ID |
| POST | /tables/:name | Insert row |
| PUT | /tables/:name/:id | Update row |
| DELETE | /tables/:name/:id | Delete row |
| POST | /sql | Execute raw SQL |
| POST | /reducer/:name | Call reducer |
Architecture
Client Layer CLI | REST API | WebSocket | Web Admin
| | |
Server Layer Rust (axum + tokio + JWT auth + subscriptions)
|
Engine Layer FASM x86-64 / AArch64 Core
|-- SoA Storage (mmap, 64-byte aligned)
|-- SIMD Kernels (AVX2 / NEON)
|-- SQL Engine (tokenizer, parser, executor)
|-- MVCC + WAL (snapshot isolation, durability)
Platform Linux x86-64 (Docker) | macOS AArch64 (native)