Skip to content

perf: reuse IVF coarse-quantizer routing across index segments - #8966

Draft
majin1102 wants to merge 8 commits into
lance-format:mainfrom
majin1102:codex/laion-shared-quantizer-benchmark
Draft

perf: reuse IVF coarse-quantizer routing across index segments#8966
majin1102 wants to merge 8 commits into
lance-format:mainfrom
majin1102:codex/laion-shared-quantizer-benchmark

Conversation

@majin1102

Copy link
Copy Markdown
Contributor

Summary

  • add a content-derived IVF coarse-quantizer fingerprint to vector index segment metadata
  • rank shared IVF centroids once and fan the selected partitions out to compatible index segments
  • fail closed to existing per-segment routing for missing, malformed, or different fingerprints
  • add query-plan metrics and a LAION 100M A/B benchmark harness

Discussion: #8965

Format change

Adds the following optional field to VectorIndexDetails:

optional bytes coarse_quantizer_fingerprint = 10;

The value is a 32-byte SHA-256 identity derived from the routing metric and ordered IVF centroids. It is an optional performance hint: old readers ignore it, and new readers fall back to per-segment routing when it is absent or invalid.

Benchmark plan

Compare two six-segment IVF_RQ indexes built from the same LAION 100M dataset version, fragment groups, IVF centroids, and RaBitQ model. The only A/B variable is fingerprint presence. Pre-warm both indexes, verify the routing path with query-plan counters, measure QPS and P50/P95/P99 latency using _rowid/_distance projections, and calculate Recall@k outside the timed interval from the actual ANN results.

Detailed benchmark results will be posted in the Discussion.

Validation

  • cargo check -p lance --tests
  • cargo clippy --all --tests --benches -- -D warnings
  • cd python && uv run make lint
  • pre-commit hooks: Ruff, rustfmt, typos, and Cargo lockfile sync

@github-actions github-actions Bot added A-python Python bindings A-java Java bindings + JNI A-deps Dependency updates A-encoding Encoding, IO, file reader/writer A-format On-disk format: protos and format spec docs format-change A change to the format spec, which requires a vote. Remove if minor (e.g. fixing typo). performance labels Sep 3, 2026
@majin1102
majin1102 force-pushed the codex/laion-shared-quantizer-benchmark branch from 20b9bcb to a068564 Compare September 4, 2026 04:19
@github-actions github-actions Bot added the A-namespace Namespace impls label Sep 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-deps Dependency updates A-encoding Encoding, IO, file reader/writer A-format On-disk format: protos and format spec docs A-java Java bindings + JNI A-namespace Namespace impls A-python Python bindings format-change A change to the format spec, which requires a vote. Remove if minor (e.g. fixing typo). performance

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant