chore: fixed README.md

This commit is contained in:
paulhorn
2026-06-27 11:33:34 +02:00
parent 88a1d9875b
commit 03f99a0bb3
+41 -40
View File
@@ -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. 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 ### Stages in Detail
- [ ] **E0 - Project Structure + Build System** - [ ] **E0 - Project Structure + Build System**
- CMake project: compile and link C and C++ together - CMake project: compile and link C and C++ together
- Directory structure: `src/`, `include/`, `test/`, `docs/`, `examples/` - Directory structure: `src/`, `include/`, `test/`, `docs/`, `examples/`
- CI: Gitea Actions with `cmake --build` + `ctest` - CI: Gitea Actions with `cmake --build` + `ctest`
- First exercise: compile a C file and a C++ file and link them via `extern "C"` - First exercise: compile a C file and a C++ file and link them via `extern "C"`
- [ ] **E1 - In-Memory Row-Store / Delta (C)** - [ ] **E1 - In-Memory Row-Store / Delta (C)**
- Slotted Page: 4 KiB byte array, header, slots, `page_insert()` / `page_get()` - Slotted Page: 4 KiB byte array, header, slots, `page_insert()` / `page_get()`
- Heap: multiple Slotted Pages, `heap_insert()` / `heap_full_scan()` - Heap: multiple Slotted Pages, `heap_insert()` / `heap_full_scan()`
- C++ wrapper: `RowStore` class encapsulating C functions - C++ wrapper: `RowStore` class encapsulating C functions
- Tests: insert, scan, page overflow - Tests: insert, scan, page overflow
- [ ] **E2 - Mini-SQL Parser (C++)** - [ ] **E2 - Mini-SQL Parser (C++)**
- Tokenizer: `SELECT`, `INSERT`, `WHERE`, identifiers, integers, strings - Tokenizer: `SELECT`, `INSERT`, `WHERE`, identifiers, integers, strings
- Parser: recursive descent -> AST (class hierarchy with Visitor pattern) - Parser: recursive descent -> AST (class hierarchy with Visitor pattern)
- Executor: `INSERT INTO t VALUES(...)` + `SELECT ... WHERE id = ?` - Executor: `INSERT INTO t VALUES(...)` + `SELECT ... WHERE id = ?`
- Tests: parse roundtrips, executor integration - Tests: parse roundtrips, executor integration
- [ ] **E3 - In-Memory Column-Store / Main (C)** - [ ] **E3 - In-Memory Column-Store / Main (C)**
- Column vectors: one array per column instead of per row - Column vectors: one array per column instead of per row
- Dictionary encoding: sorted dictionary + value-ID vector - Dictionary encoding: sorted dictionary + value-ID vector
- Advanced compression: Prefix, RLE, Cluster, Sparse, Indirect - Advanced compression: Prefix, RLE, Cluster, Sparse, Indirect
- C++ wrapper: `ColumnStore` class - C++ wrapper: `ColumnStore` class
- Tests: measure compression ratio, scan performance - Tests: measure compression ratio, scan performance
- [ ] **E4 - Delta-Merge** - [ ] **E4 - Delta-Merge**
- Periodic merge: Delta (Row) -> Main (Column) - Periodic merge: Delta (Row) -> Main (Column)
- Row-to-column transposition - Row-to-column transposition
- Rebuild dictionary, apply compression - Rebuild dictionary, apply compression
- Merge trigger: threshold (e.g. every 1000 inserts) - Merge trigger: threshold (e.g. every 1000 inserts)
- Tests: data identical before/after merge, compression takes effect - Tests: data identical before/after merge, compression takes effect
- [ ] **E5 - Query Router (HTAP Proof)** - [ ] **E5 - Query Router (HTAP Proof)**
- Point query -> row path (Delta, then B+Tree on Main) - Point query -> row path (Delta, then B+Tree on Main)
- Aggregation -> column path (Main scan) - Aggregation -> column path (Main scan)
- Read queries always see Delta union Main - Read queries always see Delta union Main
- Tests: same query, both paths, same result - Tests: same query, both paths, same result
- [ ] **E6 - SQL Extensions (C++)** - [ ] **E6 - SQL Extensions (C++)**
- `GROUP BY` + aggregate functions: `SUM`, `COUNT`, `AVG`, `MIN`, `MAX` - `GROUP BY` + aggregate functions: `SUM`, `COUNT`, `AVG`, `MIN`, `MAX`
- `JOIN` (nested loop, then hash join) - `JOIN` (nested loop, then hash join)
- `ORDER BY` + `LIMIT` - `ORDER BY` + `LIMIT`
- Tests: TPC-H inspired mini queries - Tests: TPC-H inspired mini queries
- [ ] **E7 - MVCC / Transactions (C++)** - [ ] **E7 - MVCC / Transactions (C++)**
- Snapshot isolation: each transaction sees a consistent state - Snapshot isolation: each transaction sees a consistent state
- Transaction IDs and version chains - Transaction IDs and version chains
- Consistent read view during Delta-Merge - Consistent read view during Delta-Merge
- Tests: concurrent read + write, isolation verified - Tests: concurrent read + write, isolation verified
- [ ] **E8 - *(optional)* Persistence (C + C++)** - [ ] **E8 - *(optional)* Persistence (C + C++)**
- WAL: Write-Ahead Log in C (sequential writes) - WAL: Write-Ahead Log in C (sequential writes)
- Snapshot: periodic checkpoint - Snapshot: periodic checkpoint
- Recovery: WAL replay after crash - Recovery: WAL replay after crash
- Turning "proof" into "real DB" - Turning "proof" into "real DB"
--- ---