docs: update jerboa-db.md header with Phase 5 status
ober
800d72ff99a4b1798ac01951c4464b441a43094e
--- a/jerboa-db.md +++ b/jerboa-db.md @@ -1,19 +1,22 @@ # Jerboa-DB: Datomic Without the JVM **Goal:** A fully-featured Datomic clone built entirely on Jerboa, using LevelDB for -persistent index storage and DuckDB for analytics (planned). Single binary, -embeddable, with a Datalog query engine and immutable time-travel over all data. - -**Status:** 2026-04-24 — **Core Datomic parity: complete.** Core test -suite is 37/37 passing (`make test`), including `not-join`, the -`variance`/`stddev` family, stored `:db/fn`, `log` API object, -`index-range`, and `seek-datoms` — all previously tracked as gaps. -Phase 2 (LevelDB persistence) is production-ready. Phase 4 (DuckDB -SQL-over-datoms) is functional with Parquet and CSV bulk I/O wired -to DuckDB's native `COPY TO`/`COPY FROM`. Schema migration -(rename, retype, delete) and additive evolution all work via -`migrate!`. Remaining gaps: TLS transport (libssl integration -landed in Round 8 as opt-in), CLI entrypoint. +persistent index storage and DuckDB for analytics. Single binary, embeddable, +with a Datalog query engine and immutable time-travel over all data. + +**Status:** 2026-05-03 — **Core Datomic parity: complete. MBrainz +performance parity: shipped.** Core test suite is 37/37 passing +(`make test`). Five-phase performance plan landed between +commits `439b9a7..7a45249`: pure-aggregate pushdown, DuckDB +analytical fallback (with batched VALUES sync, `:in` substitution, +auto-routing via `current-analytics-engine`), and the load-time +fix that took 1% MBrainz ingest from ~47s to ~1s (a fulltext +indexing O(n²) bug, not the originally-suspected RB-tree +allocation pressure). At 1% scale the 8-query suite finishes in +under 3 seconds total; Q4 lands in 281 ms via DuckDB and Q8 in 9 +ms — both faster than published Datahike numbers. See +[MBrainz Benchmark Results](#mbrainz-benchmark-results) for the +table. Implementation lives in `lib/jerboa-db/` (Jerboa library files using `#!chezscheme` + `(library ...)` form). Built from scratch — no `(std mvcc)`, `(std datalog)`, or