Scaling for Query Volume
用途
该技能用于指导 Qdrant 的查询规模扩展,适用于诸如“查询返回结果过多”“scroll 性能”“limit 取值过大”“分页搜索”等场景。
问题背景
当一次查询的 limit 很大(例如 1000),并且存在多个分片(例如 10 个)时,朴素实现会要求每个分片都返回完整的 1000 条结果,合计需要传输并合并 10000 个打分点。这种做法是浪费的,因为数据在自动分片中是随机分布的。
核心思路
不向每个分片索取完整的 limit,而是根据泊松分布统计为每个分片计算一个更小的 limit,然后再合并结果。这一做法之所以安全,是因为自动分片保证了数据随机且独立地分布。
生效条件
- 分片数大于 1
- 正在使用自动分片(所有被查询的分片共享同一个 shard key)
- 请求的 limit 加 offset 达到或超过 SHARD_QUERY_SUBSAMPLING_LIMIT(128)
- 查询不是精确查询
主要权衡
该策略用极小概率的结果略微不完整,换取跨分片数据传输的大幅减少,尤其适用于跨多个分片的高 limit 查询。1.2 倍安全系数与 99.9% 泊松阈值使错误率保持极低,与 HNSW 等近似向量索引本身引入的误差相当。