v0.20.0
v0.20.0
Query engine:
- Whole-graph label/reltype metadata (label/reltype counts, self-loop counts,
first-label counts, the (srcLabel, reltype, tgtLabel) schema cube, undirected
and labelled variants) is now answered directly from resident manifest
metadata for unanchored MATCH shapes — zero block reads, versus a full
unanchored scan before. Now also composes with ORDER BY / LIMIT. - Fixed a correctness bug where MATCH (a)-[r]->(a) (same variable on both
ends, i.e. a self-loop constraint) was incorrectly treated as two bare
endpoints by the metadata fast path; it now declines to the matcher.
Build (slater-build):
- Fixed a real bug where the offline builder's emit.graph_summaries phase
(whole-graph label/reltype/schema-cube summaries, computed at build time)
re-decompressed a node's entire on-disk block on every single per-node
lookup, with zero caching. At real dataset scale this made the phase
effectively unbounded (confirmed via profiling: never finished after 27+
minutes, on pace for 20-30+ hours). Fixed via a small, block-sequential
cache shared with the query engine's existing block-cache design
(extracted into a common module so both crates use the same well-tested
cache) — the phase now completes in well under 5 minutes even on a
91M-node / 1.5B-edge generation. - Added an opt-in
--features profilingbuild (off by default, verified
absent from the default dependency graph) for heap-profiling the builder
during future investigations.
Known issues carried into this release (not yet fixed, flagged intentionally
rather than silently shipped):
- The external
resolvepass (business-key edge resolution) has a real
memory-accounting gap: observed resident memory during this phase runs to
several GB against a nominal much smaller configured working-memory budget,
on large generations. Root-caused in part (a fixed-size internal buffer
pool whose aggregate footprint isn't counted against the configured
budget), but a further, size-scaling contributor is not yet isolated. - An attempted fix to the offline builder's clustering pass (bounding its
internal sort's memory the same way other passes do) regressed both wall
time and peak memory at large scale instead of improving them, and needs
to be revisited or reverted.
Neither affects correctness of the resulting on-disk generation — both are
performance/resource-usage issues in the build path only.
Full Changelog: v0.19.0...v0.20.0