Repository navigation
Conversation
Add a separately applied prototype and exact benchmark harness on top of PR #60. Both layouts share authenticated-node caching, APPEND publication and transactionally durable stale chunks. Include retention, abort, conflict, snapshot and process-restart checks. Three paired rounds at W=0/8/64 show no repeatable throughput gain from this ID implementation. Logical keys shrink, but MDBX table pages and process RSS grow. Keep the negative result, per-run metrics, source manifests and reproduction commands available for review.
|
A redb control test confirms that the node-ID space increase depends on the storage backend. redb is slower than MDBX in this workload. The test ran on
redb is 15.5–20.2% slower in matched runs. Its commit p50 is about 96–97 ms, compared with 65–70 ms for MDBX. Node IDs improve redb throughput by about 2.0–2.4%; their effect on MDBX throughput remains near zero. Native allocation for the four Merkle tables in the final round:
These are live table allocations, not total file sizes. redb uses less space for these tables, but its complete database files are larger. The test does not isolate the allocation or page-layout rule that causes the MDBX increase. An additional MDBX control replaces APPEND with ordinary insert at W=0. Its median throughput differs by less than 0.4%. APPEND does not explain the main difference in this workload. All 30 runs have matching commit roots and final cell/posting digests. Node counts and value sizes match. redb also passes the storage contract tests and the 200-commit retained-graph tests for both layouts at W=0/8/64. The data fit in RAM. redb 4.4.0 uses a 1 GiB page cache; each container has a 24 GiB limit and CPUs 28–31. Backend results include their adapters: redb caches table handles; the current MDBX adapter checks the catalogue for each operation. This is not a bare KV-engine comparison or a production-capacity result. Recommendation: keep MDBX. Test node IDs assigned in depth/path order next. Measure allocated table bytes and the full seal + commit + GC cycle. This ordering remains an untested hypothesis. |
Add a comparison prototype on top of #60. The engine stays unchanged until the new patch is applied.
The patch supports version/path keys and monotonic node IDs. Both variants use the same cache, batch updates, APPEND publication and durable stale-list GC. The remaining queue chunks survive aborts and process restarts. The ID allocator publishes its counter with the same transaction as nodes and head.
Results
Three paired rounds on
gf-prov-1, with 1,000 mixed operations per measured commit:This implementation gives no repeatable throughput gain. IDs reduce logical key bytes, but MDBX tables use more pages. At W=0, Merkle key/value bytes fall from 23.22 to 21.19 MiB, while Merkle table pages grow from 74.50 to 107.78 MiB. These results do not support replacing version/path addressing with this ID implementation.
All 18 runs have matching roots and final cell/posting digests. Node counts and value sizes also match. The data fit in RAM. The report includes timing, memory, physical sizes and limits. It separates measurements from the untested allocation-order hypothesis.
Validation
-D warnings, all-target build, benchmark compilation and harness compilation pass locally.Includes the patch, exact harness and lockfile, reproduction scripts, per-run results and a CI job that applies and tests the prototype. The node-ID format is experimental and has no migration.