From 03f99a0bb3ecc5e0f48d48d7f36e02bd57372054a066071abe6a5134213bf46c Mon Sep 17 00:00:00 2001 From: paulhorn Date: Sat, 27 Jun 2026 11:33:34 +0200 Subject: [PATCH] chore: fixed README.md --- README.md | 81 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 41 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 2757b3e..69fd26c 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,10 @@ --- -# PaulDB +# PaulDB 🏳️‍🌈🔀📊 -Handcrafted HTAP database in C and C++ 🦖🦕🔨🏳️‍🌈 +Handcrafted HTAP database in C and C++ +*Delta-merge meets columnar analytics, crafted for everyone* Row+Column Storage, Delta-Merge, inspired by SAP HANA. A long-term artisan project where every data structure is designed from scratch. @@ -395,60 +396,60 @@ gantt ### Stages in Detail - [ ] **E0 - Project Structure + Build System** - - CMake project: compile and link C and C++ together - - Directory structure: `src/`, `include/`, `test/`, `docs/`, `examples/` - - CI: Gitea Actions with `cmake --build` + `ctest` - - First exercise: compile a C file and a C++ file and link them via `extern "C"` + - CMake project: compile and link C and C++ together + - Directory structure: `src/`, `include/`, `test/`, `docs/`, `examples/` + - CI: Gitea Actions with `cmake --build` + `ctest` + - First exercise: compile a C file and a C++ file and link them via `extern "C"` - [ ] **E1 - In-Memory Row-Store / Delta (C)** - - Slotted Page: 4 KiB byte array, header, slots, `page_insert()` / `page_get()` - - Heap: multiple Slotted Pages, `heap_insert()` / `heap_full_scan()` - - C++ wrapper: `RowStore` class encapsulating C functions - - Tests: insert, scan, page overflow + - Slotted Page: 4 KiB byte array, header, slots, `page_insert()` / `page_get()` + - Heap: multiple Slotted Pages, `heap_insert()` / `heap_full_scan()` + - C++ wrapper: `RowStore` class encapsulating C functions + - Tests: insert, scan, page overflow - [ ] **E2 - Mini-SQL Parser (C++)** - - Tokenizer: `SELECT`, `INSERT`, `WHERE`, identifiers, integers, strings - - Parser: recursive descent -> AST (class hierarchy with Visitor pattern) - - Executor: `INSERT INTO t VALUES(...)` + `SELECT ... WHERE id = ?` - - Tests: parse roundtrips, executor integration + - Tokenizer: `SELECT`, `INSERT`, `WHERE`, identifiers, integers, strings + - Parser: recursive descent -> AST (class hierarchy with Visitor pattern) + - Executor: `INSERT INTO t VALUES(...)` + `SELECT ... WHERE id = ?` + - Tests: parse roundtrips, executor integration - [ ] **E3 - In-Memory Column-Store / Main (C)** - - Column vectors: one array per column instead of per row - - Dictionary encoding: sorted dictionary + value-ID vector - - Advanced compression: Prefix, RLE, Cluster, Sparse, Indirect - - C++ wrapper: `ColumnStore` class - - Tests: measure compression ratio, scan performance + - Column vectors: one array per column instead of per row + - Dictionary encoding: sorted dictionary + value-ID vector + - Advanced compression: Prefix, RLE, Cluster, Sparse, Indirect + - C++ wrapper: `ColumnStore` class + - Tests: measure compression ratio, scan performance - [ ] **E4 - Delta-Merge** - - Periodic merge: Delta (Row) -> Main (Column) - - Row-to-column transposition - - Rebuild dictionary, apply compression - - Merge trigger: threshold (e.g. every 1000 inserts) - - Tests: data identical before/after merge, compression takes effect + - Periodic merge: Delta (Row) -> Main (Column) + - Row-to-column transposition + - Rebuild dictionary, apply compression + - Merge trigger: threshold (e.g. every 1000 inserts) + - Tests: data identical before/after merge, compression takes effect - [ ] **E5 - Query Router (HTAP Proof)** - - Point query -> row path (Delta, then B+Tree on Main) - - Aggregation -> column path (Main scan) - - Read queries always see Delta union Main - - Tests: same query, both paths, same result + - Point query -> row path (Delta, then B+Tree on Main) + - Aggregation -> column path (Main scan) + - Read queries always see Delta union Main + - Tests: same query, both paths, same result - [ ] **E6 - SQL Extensions (C++)** - - `GROUP BY` + aggregate functions: `SUM`, `COUNT`, `AVG`, `MIN`, `MAX` - - `JOIN` (nested loop, then hash join) - - `ORDER BY` + `LIMIT` - - Tests: TPC-H inspired mini queries + - `GROUP BY` + aggregate functions: `SUM`, `COUNT`, `AVG`, `MIN`, `MAX` + - `JOIN` (nested loop, then hash join) + - `ORDER BY` + `LIMIT` + - Tests: TPC-H inspired mini queries - [ ] **E7 - MVCC / Transactions (C++)** - - Snapshot isolation: each transaction sees a consistent state - - Transaction IDs and version chains - - Consistent read view during Delta-Merge - - Tests: concurrent read + write, isolation verified + - Snapshot isolation: each transaction sees a consistent state + - Transaction IDs and version chains + - Consistent read view during Delta-Merge + - Tests: concurrent read + write, isolation verified - [ ] **E8 - *(optional)* Persistence (C + C++)** - - WAL: Write-Ahead Log in C (sequential writes) - - Snapshot: periodic checkpoint - - Recovery: WAL replay after crash - - Turning "proof" into "real DB" + - WAL: Write-Ahead Log in C (sequential writes) + - Snapshot: periodic checkpoint + - Recovery: WAL replay after crash + - Turning "proof" into "real DB" ---