Questions
6 of 13
1Why does Qdrant recommend disabling indexing (or raising the indexing threshold) during a large bulk import, then re-enabling it afterward?
2What is the purpose of the indexing_threshold setting, and how does it affect small versus large collections differently?
3How does GPU-accelerated indexing change the economics of re-indexing a large, frequently-updated collection?
4What is incremental HNSW indexing, and why does it matter for upsert-heavy workloads?
5Your Qdrant search endpoint's p50 latency looks fine, but p99 latency is very high. What are the most likely causes to investigate first?
6How would you reduce query latency for a collection that must remain on-disk due to its size, without moving the whole collection into RAM?
7What is the effect of increasing the number of search threads/parallelism on a single node with limited CPU cores?
8How would you benchmark whether a proposed quantization configuration is worth the accuracy trade-off for your workload?
9What's the difference between scaling Qdrant vertically (bigger node) and horizontally (more shards/nodes), and when does horizontal scaling stop paying off?
10Two teams store the same 50-million-vector collection - one keeps it fully in memory, one on disk with quantization. What operational differences should each expect?
11Why can moving the payload storage engine on-disk versus in-memory have a bigger impact on filtered-search latency than the vector storage location?
12How would you decide, for a specific collection, whether to enable quantization with rescoring versus simply moving vectors on-disk without quantization?
13What memory overhead does the HNSW graph itself add on top of the raw vector data, and why does that matter when planning RAM for an in-memory collection?
06 / 13

How would you reduce query latency for a collection that must remain on-disk due to its size, without moving the whole collection into RAM?

Shrink the working set, shorten the traversal, and prune with indexes

When a collection has to stay on disk, latency is dominated by how much data each query has to touch and how much of that data is resident in the page cache. The strategy has three parts: shrink the data the traversal touches, reduce the number of traversal steps, and avoid touching data the query does not need. The most effective single change is quantization with rescoring. Quantized vectors are far smaller, so the working set fits in cache more easily, and the traversal distance computations use the small quantized vectors while only a small candidate set is rescored against the full-precision vectors on disk. Binary quantization with oversampling and rescoring is often the best fit for on-disk collections because it shrinks the traversal data by 32x and the rescoring step touches only a bounded number of raw vectors.

The second lever is inline storage of the quantized vectors in the graph nodes. On an on-disk collection without inline storage, traversing the graph requires one read for the node's edges and a second read for the vector data of each candidate. Inlining the quantized vector into the node turns that into a single read, which roughly halves the I/O per traversal step. This matters most when the collection is I/O-bound, which is exactly the case here. The third lever is reducing the traversal length: a lower ef reduces the number of nodes visited, which reduces I/O at the cost of recall, and a moderate m reduces the number of edges stored per node. The fourth is reducing the candidate set before it reaches the expensive stage - use payload indexes to prune segments and use prefetch to reduce the number of points that need full-precision rescoring. The fifth is exploiting locality: if part of the collection is hot, ensure that portion stays in the page cache by keeping it in RAM or by using a hot/cold tiering approach, so that most queries never touch cold disk pages.

  1. 1

    Quantize with rescoring: binary quantization (32x) or scalar (4x) keeps the traversal working set small.

  2. 2

    Inline storage: co-locate quantized vectors with graph nodes to halve the I/O per traversal step.

  3. 3

    Lower ef and moderate m: fewer nodes visited per query, at the cost of recall.

  4. 4

    Payload indexes: prune segments and reduce the candidate set before vector search.

  5. 5

    Prefetch and rerank: use a cheap first stage to produce a small candidate set, then rescore exactly.

  6. 6

    Hot/cold tiering: keep the hot portion of the collection in RAM or in the page cache and let cold data stay on disk.

  7. 7

    Storage: NVMe rather than spinning disk makes on-disk latency acceptable for interactive workloads.

The trade-off is recall and complexity against latency. Every lever that reduces latency either loses some recall (quantization, lower ef, lower m) or adds operational complexity (tiering, index tuning). The right combination depends on how much recall you can give up and how much engineering you are willing to invest. The common mistake is trying to fix on-disk latency purely by tuning ef, which only helps if the traversal is the bottleneck; if the bottleneck is payload retrieval or segment fan-out, ef changes nothing. The second mistake is enabling quantization without rescoring on a collection where recall matters - the latency improvement is real but the accuracy loss may be unacceptable. The third mistake is ignoring the page cache when sizing the machine: a collection that could fit its working set in 32 GB of RAM but is deployed on a 16 GB node will thrash regardless of how well it is configured. Version note: on-disk HNSW, inline storage, and the quantization options have all changed across releases - the available levers differ between versions, so verify which ones your deployment supports before designing the plan.

javascript

Version-dependent: on-disk HNSW, inline storage, and the supported quantization schemes have changed across releases, as have the defaults for the optimizer thresholds that decide when a segment moves to disk. The latency improvement from inline storage in particular is version-specific because it depends on the storage layout the current version produces. Benchmark the configuration on your version with your data before committing to it, and re-benchmark after upgrades.

Difficulty: 8/10
Topics: Quantization, Inline Storage, Latency Tuning, Memory Optimization

Scenario Questions

0-2 years experience
  1. 1

    You have a 50M-vector collection on disk with a 40ms p99. List the two changes you would try first and what you expect each to do.

  2. 2

    A teammate suggests adding more ef to fix on-disk latency. Explain when that helps and when it makes things worse.

2-5 years experience
  1. 1

    You enable binary quantization on an on-disk collection and latency drops but recall also drops. Walk through how you would recover recall without giving up the latency win.

  2. 2

    Your on-disk collection has a p99 of 60ms and the SLO is 25ms. Rank the levers you would try and estimate the impact of each before touching the production collection.

5-8 years experience
  1. 1

    Design a hot/cold storage architecture for a 300M-vector collection where the hot 10 percent must respond in under 15ms and the cold 90 percent in under 80ms. Specify the storage, quantization, and routing.

  2. 2

    You must reduce the on-disk p99 by 50 percent without a recall regression. Propose a plan that uses inline storage, oversampling, and index tuning, and describe how you would validate it.

8+ years experience
  1. 1

    Derive the expected query latency of an on-disk collection with inline quantized vectors as a function of working-set size, page-cache hit rate, and disk latency. Where does the model show that a further latency reduction is not achievable without adding RAM?

  2. 2

    You are designing a storage engine for a search system that must serve 1B vectors on commodity hardware. Describe the layout, the quantization, and the caching strategy, and identify the assumptions that could invalidate the design.

Follow-up Questions

  • How would you decide between adding RAM to the node, adding quantization, and adding a hot/cold tiering layer, given a fixed latency SLO?
  • If the query pattern is highly skewed so that 10 percent of the collection serves 90 percent of queries, how would you design the storage layout to exploit that skew?