Questions
9 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?
09 / 13

What's the difference between scaling Qdrant vertically (bigger node) and horizontally (more shards/nodes), and when does horizontal scaling stop paying off?

Vertical adds resources to one node; horizontal partitions across nodes with fan-out cost

Vertical scaling means giving a node more CPU, RAM, and faster storage. Horizontal scaling means adding shards and nodes so that the work is partitioned across machines. Vertical scaling is simpler: there is no fan-out, no distributed merge, no consistency concern beyond replication, and query latency is bounded by one machine's capability. Its limit is the largest machine you can buy and the fact that cost grows superlinearly at the top end - the biggest instances cost disproportionately more per unit of RAM and CPU. Horizontal scaling removes the single-machine ceiling and can also improve availability because the failure domain is smaller, but it introduces fan-out: every query without a shard key hits every shard, each shard returns a local top-k, and the coordinator merges. The coordinator's work and the network cost grow with shard count, and the slowest shard bounds the query latency.

The mechanism that determines when horizontal scaling stops paying off is the balance between parallelism gain and coordination overhead. Adding shards parallelizes the search, so ideally latency drops as 1/N. But the coordinator has to send the query to N shards, collect N responses, and merge them, and the tail latency of the query is the maximum of the N shard latencies. If the shards are uniform and fast, the maximum is close to the mean, and fan-out is cheap. If there is any skew - a hot shard, a slow node, or a shard with more data - the maximum is much worse than the mean, and adding more shards makes the tail worse rather than better. At some point the coordinator itself becomes the bottleneck: merging N lists of size k is O(N*k) work, and at high N the merge dominates the latency. There is also a fixed per-shard overhead (network round trip, request serialization) that does not shrink with shard size, so very small shards have poor efficiency. The practical ceiling is usually somewhere in the tens of shards per query before the overhead outweighs the parallelism, though it depends heavily on latency budget and on whether queries can be routed to a single shard.

  1. 1

    Vertical: simpler, no fan-out, latency bounded by one machine, cost superlinear at the top end.

  2. 2

    Horizontal: removes the single-machine ceiling, improves availability, adds fan-out and merge cost.

  3. 3

    Fan-out cost: coordinator work and network round trips scale with shard count; the slowest shard bounds latency.

  4. 4

    Skew sensitivity: with uneven shards or slow nodes, adding shards worsens the tail rather than improving it.

  5. 5

    Custom sharding mitigates fan-out: tenant-scoped queries hit one shard, so horizontal scaling stays cheap.

  6. 6

    Coordinator bottleneck: merging N lists of size k is O(N*k); at high shard counts the merge dominates.

The trade-off is simplicity and predictable latency against scale and availability. I scale vertically until the machine is the bottleneck or until cost per unit of capacity turns sharply upward, then scale horizontally. Horizontal scaling pays off most when queries can be routed to a single shard via a shard key, because then the fan-out cost disappears and the parallelism is free. It pays off least when every query must fan out to all shards, because then the coordinator and the slowest shard become the bottleneck. The common mistake is assuming horizontal scaling always improves latency. It improves throughput much more reliably than latency, because latency is bounded by the slowest shard and by the merge. The second mistake is increasing shard count to fix a memory problem - sharding partitions data across nodes, so it does help with capacity, but it does not help if the bottleneck is query cost or coordinator work. The third mistake is ignoring the coordinator: at high shard counts, the node running the coordinator becomes hot, and that is often the first thing to fail. Version note: the shard placement and rebalancing behavior, the coordinator's implementation, and the default sharding strategy have changed across Qdrant releases, so the crossover point where horizontal scaling stops paying off is version-specific and should be measured rather than assumed.

javascript

Version-dependent: the sharding strategy, rebalancing, and coordinator behavior have changed across Qdrant releases, and the point at which horizontal scaling stops paying off depends on those internals. If you are planning a cluster, benchmark fan-out latency at the shard counts you are considering on your version, and measure the coordinator's CPU under load rather than extrapolating from a small cluster.

Difficulty: 8/10
Topics: Scaling, Sharding, Distributed Architecture

Scenario Questions

0-2 years experience
  1. 1

    You have a 5M-vector collection on a single node and latency is acceptable. Explain when you would consider sharding and when you would not.

  2. 2

    A teammate says adding shards always reduces latency. Explain when that is false.

2-5 years experience
  1. 1

    You double the shard count from 4 to 8 and throughput improves but p99 gets worse. Diagnose why and propose a fix.

  2. 2

    You need to grow from a 2-node to a 10-node cluster. Explain the trade-offs of sharding versus replicating and how you would decide the split.

5-8 years experience
  1. 1

    Design a cluster topology for a workload with 70 percent tenant-scoped queries and 30 percent global queries over 500M vectors. Specify sharding, replication, and routing, and justify the fan-out characteristics.

  2. 2

    You are at 16 shards and considering 64. Walk through the analysis you would do before increasing the shard count, including the coordinator cost model.

8+ years experience
  1. 1

    Derive the query latency of a sharded search as a function of shard count, per-shard latency distribution, and coordinator merge cost. Where does the model show that adding shards increases latency?

  2. 2

    You are designing a system that must scale from 10M to 10B vectors over three years. Describe the scaling roadmap, the points at which you would switch strategies, and the risks at each transition.

Follow-up Questions

  • How would you measure the fan-out overhead of a cluster at different shard counts, and what metric would tell you that you have crossed the crossover point?
  • If your workload is a mix of shard-key-scoped and global queries, how would you decide the shard count and layout to optimize for both?