Expand description
The graph: a key discipline over the phase-1 store. No structure of its own.
One hop = one descent + a sequential read of the degree (GRAPH.md). Levers: dense sequential ids so co-inserted nodes share leaves; sorted-frontier BFS so a wave is one ordered sweep instead of a descent per node; props in the leaf so hybrid filters cost no extra I/O.
Laws: streaming iterators (no Vec ∝ store); hop cost ∝ degree; the visited set of a BFS ∝ the reachable set – inherent to “never revisit”, the one named exception, bounded by the caller’s depth.
Structs§
- Edge
Iter - (src, ty, other, props) per edge. For
rev(redge) keys,otheris the true source and props are on the forward key only. - Graph
- Label
Iter - Parallel
Searcher - Long-lived fan-out searcher (2g.2): T pinned snapshot readers, each owning one contiguous id slice of the fingerprint keyspace. Send the same query to all slices, merge survivors, exact-rescore on reader 0.
- Prop
Iter - (value, id) pairs from a property range, streamed. Stops past
hior the prop’s space – the tag+prop prefix bounds it like every other scan. - VecMeta
- Everything one vector field needs to be read back correctly, in one row
(
keys::catalog_field(CAT_VEC, field)). Nothing here is derivable from the vectors:
Enums§
- Metric
- Distance metrics. Lower is better for all three – cosine and dot are returned NEGATED so one ordering rule serves every metric.