Questions
8 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?
08 / 13

How would you benchmark whether a proposed quantization configuration is worth the accuracy trade-off for your workload?

Measure recall against exact ground truth, plus latency and memory, on real queries

A quantization benchmark has three outputs: how much memory it saves, how much latency it changes, and how much recall it costs. The memory and latency parts are easy - compare the collection's reported size and measure p50/p99 latency at a fixed query load. The recall part is the one teams get wrong, because it requires ground truth. The correct method is to run an exact search (brute force, no quantization, no HNSW approximation) over the same queries on the same corpus and treat those results as ground truth. Then run the same queries against the quantized collection and compute recall@k as the fraction of ground-truth top-k that appear in the quantized collection's top-k. That number, together with the latency and memory deltas, is the trade-off. Recall must be measured with the exact configuration you plan to ship, including oversampling and rescoring, because those settings materially change the result.

The most important methodological detail is the query set. Using random vectors or a small synthetic query set will give misleading results because quantization error is distribution-dependent - it depends on how the data is clustered and how close the near neighbors are. The benchmark must use queries drawn from the actual production distribution, ideally a few thousand of them, so that the recall estimate has acceptable variance. If you cannot get production queries, use a held-out set from the same source as your corpus, not random noise. The second detail is to control for confounding variables. If you change quantization and also change ef, you cannot attribute the recall difference to quantization. Hold ef, m, and the candidate set sizes fixed across configurations, and vary only the quantization settings. The third detail is to measure at the operating point you will use - if you plan to raise oversampling to 5 to recover recall, benchmark at oversampling 5, not at the default.

  1. 1

    Ground truth: exact search on the unquantized collection, with the same queries and the same distance metric.

  2. 2

    Recall@k: fraction of ground-truth top-k present in the quantized collection's top-k, measured at the shipping configuration.

  3. 3

    Query set: production-distributed queries, thousands of them, not random vectors.

  4. 4

    Controls: hold ef, m, and candidate set sizes fixed; vary only the quantization settings.

  5. 5

    Metrics: memory footprint, p50 and p99 latency under load, and recall@k for each configuration.

  6. 6

    Decision rule: choose the configuration that meets the recall floor at the lowest memory/latency cost, not the one with the best single metric.

The trade-off being evaluated is always the same: memory and latency against recall. There is no universal answer because the acceptable recall loss depends on the application - a recommendation system may tolerate a 2-point recall drop, while a compliance search may not. The benchmark's job is to produce the curve so the product owner can choose a point on it. The common mistake is measuring recall against another approximate configuration rather than exact ground truth, which makes both numbers wrong and can hide a large regression. The second mistake is benchmarking on a static snapshot and shipping, then discovering that recall degrades as the corpus drifts - quantization error is data-dependent, so re-benchmark periodically. The third mistake is ignoring p99: a configuration that looks fine at p50 can have a much worse tail because rescoring touches disk. Version note: the available quantization schemes, the way oversampling and rescoring are configured, and the collection's reported memory usage have all changed across Qdrant releases - benchmark on the version you will deploy, not on a different one.

javascript

Version-dependent: the QuantizationSearchParams fields (rescore, oversampling) and the available quantization schemes differ across releases, and the collection's reported memory usage is not directly comparable between versions because the internal layout changed. If you are comparing configurations, do it on a single version and re-benchmark after upgrades rather than comparing numbers across versions.

Difficulty: 7/10
Topics: Quantization, Benchmarking, Recall

Scenario Questions

0-2 years experience
  1. 1

    You enable scalar quantization and recall drops by 0.5 points. Explain how you would determine whether that is acceptable.

  2. 2

    A teammate benchmarks quantization using random query vectors. Explain why the results are not trustworthy.

2-5 years experience
  1. 1

    You need to choose between scalar and binary quantization for a 20M-vector collection. Describe the benchmark you would run and the decision criteria.

  2. 2

    Your benchmark shows binary quantization is 3 points worse on recall but 25 percent faster. Walk through how you would decide whether to ship it.

5-8 years experience
  1. 1

    Design a continuous quantization evaluation pipeline that runs on a schedule and alerts when recall against ground truth falls below a threshold. What sampling and statistical considerations matter?

  2. 2

    You must choose a quantization configuration for a multi-tenant collection where different tenants have different recall sensitivities. Describe how you would benchmark and configure for this.

8+ years experience
  1. 1

    Derive the statistical power of a recall benchmark as a function of query count and effect size. How many queries do you need to detect a 1-point recall regression with confidence?

  2. 2

    You are designing an A/B test for a quantization change on a live system where you cannot run exact ground truth on every query. Describe the sampling, the metrics, and how you would detect a regression that only affects a subset of queries.

Follow-up Questions

  • How would you detect that a quantization configuration's recall has degraded over time due to data drift, and how frequently would you re-run the benchmark?
  • If you cannot get production queries for the benchmark, what is the next-best query set and what biases would you expect in the recall estimate?