Motivation
Add MillenniumDB to the cross-system benchmark. MillenniumDB (IMFD / U. Chile) implements worst-case-optimal (leapfrog trie) joins natively, making it the most apt head-to-head comparison for this engine's LTJ.
Current state (feasibility)
- The harness (
bench/cross-system/) already runs gqlite, graphqlite, kuzu, grafeo, neo4j, duckdb (ALL_SYSTEMS in run_all.sh).
- Adding a system follows the documented recipe (see
gqlrust/CLAUDE.md "Adding a system"): create bench/cross-system/millenniumdb/ with:
setup.py — load full LDBC SF0.1 (counts must match: 327,588 nodes / 1,477,965 edges)
run.py — emit the CSV schema + the ROW ... hash= line via _lib/row_hash.py (must byte-mirror canonicalize_* in src/bin/ldbc_bench.rs)
- IC translations for the implemented ICs (2, 5, 6, 8, 9, 11)
requirements.txt, README.md, DIVERGENCES.md
- register in
run_all.sh (ALL_SYSTEMS, SETUP_CMD, SETUP_MARKER, RUNNER, REBUILD_FLAG) and in compare_results.py _normalize
Feasibility
Additive, no engine changes; follows a proven pattern. Effort is the loader + runner + a MillenniumDB client (it runs as a server; needs its HTTP/driver interface) and the IC dialect translations. The row-equivalence oracle (sha256 of iter-0 rows) keeps the comparison honest.
Motivation
Add MillenniumDB to the cross-system benchmark. MillenniumDB (IMFD / U. Chile) implements worst-case-optimal (leapfrog trie) joins natively, making it the most apt head-to-head comparison for this engine's LTJ.
Current state (feasibility)
bench/cross-system/) already runsgqlite, graphqlite, kuzu, grafeo, neo4j, duckdb(ALL_SYSTEMSinrun_all.sh).gqlrust/CLAUDE.md"Adding a system"): createbench/cross-system/millenniumdb/with:setup.py— load full LDBC SF0.1 (counts must match: 327,588 nodes / 1,477,965 edges)run.py— emit the CSV schema + theROW ... hash=line via_lib/row_hash.py(must byte-mirrorcanonicalize_*insrc/bin/ldbc_bench.rs)requirements.txt,README.md,DIVERGENCES.mdrun_all.sh(ALL_SYSTEMS,SETUP_CMD,SETUP_MARKER,RUNNER,REBUILD_FLAG) and incompare_results.py_normalizeFeasibility
Additive, no engine changes; follows a proven pattern. Effort is the loader + runner + a MillenniumDB client (it runs as a server; needs its HTTP/driver interface) and the IC dialect translations. The row-equivalence oracle (sha256 of iter-0 rows) keeps the comparison honest.