最近更新时间:2026-09-11 17:06:40
本文档旨在为使用金山云 Milvus 的用户提供性能参考,帮助您根据业务的数据规模、向量维度、召回率要求等指标,选择合适的实例规格。
本次测试使用 VectorDBBench(Zilliz 开源向量库基准工具,支持插入、检索、过滤检索、流式压测及 SIFT/GIST/Cohere/OpenAI 等数据集,支持自定义数据),用于复现 Milvus 检索、过滤、写入与加载性能。项目地址:https://github.com/zilliztech/VectorDBBench
测试场景 | 数据集 | 数据规模 | 索引 | 测试规格 | TopK | 并发度 | 输出 |
|---|---|---|---|---|---|---|---|
不同规格存储容量 | SIFT 128 | - | HNSW | 4 CU | - | - | (规格,数据量) |
不同规格的检索性能 | Cohere 768 | 10M | HNSW | 4 CU | 10 | 1,8,16,32,64,128,256 | (规格,检索性能、召回率) |
检索性能&向量维度 | Cohere 768 | 10M | HNSW | 8 CU | 100 | 1,8,16,32,64,128,256 | (规格,检索性能、召回率) |
标量过滤检索性能 | Cohere 768 | 10M | HNSW | 8 CU | 100 | 1,8,16,32,64,128,256 | (过滤比例,检索性能) |
检索性能&召回率关系 | Cohere 768 | 10M | 调整M、efConstruction和ef控制召回率 | 4CU | 100 | 256 | (召回率,QPS) |
数据加载性能 | Cohere 768 | 10M | HNSW | 4 CU | - | 8,16,32,64,128,256 | (规格,加载性能) |
CU | QueryNode | StreamingNode | DataNode | Proxy | MixCoord |
|---|---|---|---|---|---|
4 | 8C32G X 4 | 4C16G X 1 | 4C16G X 4 | 2C8G X 1 | 2C8G X 1 |
8 | 8C32G X 8 | 4C16G X 2 | 8C16G X 8 | 8C32G X 1 | 8C32G X 1 |
本文档性能数据基于同可用区内网环境、客户端与实例分离压测测得。实际生产环境中,受网络延迟、数据分布、索引类型、标量字段、参数配置及业务负载等因素影响,性能表现可能有所差异。所有数据仅供参考,请用户结合自身真实场景进行验证。
测试条件:
数据集 | 索引 | 测试规格 |
|---|---|---|
SIFT 128 维 | HNSW | 4 CU |
测试结果:
数据集 | 4CU | 8CU |
|---|---|---|
SIFT 128 维 | 约 1.64 亿 | 约 3.08 亿 |
GIST 960维 | 约 3258 万 | 约 5896 万 |
测试条件:
数据集 | 索引 | 测试规格 | TopK | 并发度 |
|---|---|---|---|---|
Cohere 768维 1000万数据 | HNSW | 4 CU | 10 | 1,8,16,32,64,128,256 |
测试结果:
Cohere768D topK=10,检索性能对比
Cohere768D topK=50,检索性能对比
Cohere768D topK=100,检索性能对比
Cohere768D topK=250,检索性能对比
Cohere768D topK=500,检索性能对比
Cohere768D topK=1000,检索性能对比
结论:
测试规格 | TopK=10 | TopK=50 | TopK=100 | TopK=250 | TopK=500 | TopK=1000 |
|---|---|---|---|---|---|---|
峰值QPS | 峰值QPS | 峰值QPS | 峰值QPS | 峰值QPS | 峰值QPS | |
4CU | 约 2603 | 约 1095 | 约 668 | 约 331 | 约 191 | 约112 |
8CU | 约 3338 | 约 1813 | 约 1109 | 约 559 | 约 336 | 约196 |
测试条件:
数据集 | 索引 | 测试规格 | TopK | 并发度 |
|---|---|---|---|---|
Cohere 768维 1000万数据 | HNSW | 8 CU | 100 | 1,8,16,32,64,128,256 |
测试结果:
Cohere768D10M/Cohere1024D10M/OpenAI1536D5M topK=100,检索性能对比
召回率:
Cohere 1024 | Cohere 768 | OpenAI 1536 |
|---|---|---|
0.9744 | 0.9832 | 0.9975 |
不同ef召回率对比:
Cohere768D10M 4CU/8CU 不同ef,召回率对比:(32并发)
不同ef平均时延对比:
Cohere768D10M 4CU/8CU 不同ef,平均时延对比:(32并发)
不同ef的QPS对比:
Cohere768D10M 4CU/8CU 不同ef,QPS对比:(32并发)
测试条件:
数据集 | 索引 | 测试规格 | TopK | 并发度 |
|---|---|---|---|---|
Cohere 768维 1000万数据 | HNSW | 8 CU | 100 | 1,8,16,32,64,128,256 |
测试结果:
Cohere768D 10M,不同过滤比例下,不同并发度下的QPS
Cohere768D 10M,不同过滤比例下,不同并发度下的平均时延
测试条件:
数据集 | 索引 | 测试规格 | TopK | 并发度 |
|---|---|---|---|---|
Cohere 768维 1000万数据 | M=30 | 4CU | 100 | 256 |
测试结果:
Cohere768D 10M,256并发下,HNSW索引ef与QPS、Recall关系
测试条件:
数据集 | 索引 | 测试规格 | 并发度 |
|---|---|---|---|
Cohere 768维 1000万数据 | HNSW | 4 CU | 4,8,16 |
测试结果:
数据集 | 规格 | 并发度 | insert_duration(ms) | optimize_duration(ms) | load_duration(总和)(ms) |
|---|---|---|---|---|---|
Cohere768D10M | 4CU | 4 | 2310.53 | 9377.98 | 11688.51 |
Cohere768D10M | 4CU | 8 | 2283.59 | 9449.64 | 11733.23 |
Cohere768D10M | 4CU | 16 | 1965.85 | 9649.08 | 11614.93 |
Cohere768D10M | 8CU | 4 | 2298.37 | 5843.25 | 8141.62 |
Cohere768D10M | 8CU | 8 | 2025.06 | 2161.74 | 4186.81 |
Cohere768D10M | 8CU | 16 | 1844.95 | 2444.61 | 4289.56 |
术语说明
insert_duration(数据写入耗时):客户端批量发送插入请求,数据经 Proxy 转发至 StreamingNode,写入 WAL 及内存中 Growing Segment 的耗时。此阶段数据可被流式检索,但尚未构建向量索引。
optimize_duration(索引构建与合并耗时):数据量达到阈值后,StreamingNode 将 Growing Segment 封存为 Sealed Segment 并持久化;DataNode 拉取数据执行 Compaction(合并小文件)和向量索引(如 HNSW)构建的耗时。此阶段完成后,数据可被 QueryNode 高效检索。
load_duration(总耗时):从数据开始写入到索引构建完成的整体耗时,即 insert_duration 与 optimize_duration 之和,代表数据从“可写”到“可提供高性能检索”的完整导入周期。
纯净模式
