You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Round-3 perf push sub-issue (tracked under umbrella #535).
[S] Use Vec<u32> doc-id internal type throughout the index (instead of u64)
Where: HNSW graph (graph.rs:21-22,73), Concurrent build
(writer.rs:40), QuantizedVectorPool::field_index value type
(quantized_storage.rs:45), neighbour lists, etc.
Current behaviour: doc IDs are u64 end-to-end inside the
index, even though they're segment-local ordinals once we get past
the public API.
Why it might be a bottleneck: every neighbour list, visited
set, candidate heap stores 8 B per entry — half what is needed
for <=2^31 segment sizes (segment size is anyway capped by the
vector_count u32 in IVF/Flat headers).
Round-3 perf push sub-issue (tracked under umbrella #535).
[S] Use
Vec<u32>doc-id internal type throughout the index (instead ofu64)graph.rs:21-22,73), Concurrent build(
writer.rs:40),QuantizedVectorPool::field_indexvalue type(
quantized_storage.rs:45), neighbour lists, etc.u64end-to-end inside theindex, even though they're segment-local ordinals once we get past
the public API.
set, candidate heap stores 8 B per entry — half what is needed
for <=2^31 segment sizes (segment size is anyway capped by the
vector_count
u32in IVF/Flat headers).intordinals; Qdrant usesu32 PointOffsetinternally.InternalId = u32withFrom/TryFrom<u64>conversion at the boundary; refactor graph storageu32(already started for perf(vector/hnsw): replace HashSet visited-set with bitmap #406 visited bitmap).Single-segment caps at 4 G vectors which is fine.
with the CSR migration (Add parallel search #1).
ID:
VI-17— see~/.claude/tasks/laurus/20260523_perf_round3_audit/task_list.mdfor the full Round-3 issue list.