向量数据库红海突围:2026年Qdrant vs Milvus vs Chroma vs VexDB 性能基准与选型决策树
基于统一测试集(100万条768维向量)的真实基准测试,从写入吞吐、P99延迟、混合搜索精度、内存占用、运维复杂度五维度对比四大向量数据库,附选型决策树。
KazK
RAG项目的生死线,往往不在LLM,而在向量检索。
上个月,一个做企业知识库的团队找到了我。他们的RAG pipeline端到端延迟飙到3.2秒,OpenAI API调用只占500ms,剩下的2.7秒全卡在向量检索上。查了一下架构:Chroma单进程存了800万条向量,filter查询直接扫全表,内存占用14GB,一周内OOM崩溃了三次。
这不是个案。2026年的向量数据库市场,已经进入”红海竞争”阶段:
- Qdrant(Rust编写,24K+ GitHub Stars):以高性能和混合搜索著称
- Milvus(Go+C++,32K+ Stars):靠分布式架构和云原生能力拿下企业市场
- Chroma(Python/TypeScript,16K+ Stars):以极简API统治原型开发场景
- VexDB(Rust,Agent专用):以”Agent原生”设计成为新兴黑马
本文不做功能清单对比。我们在统一测试集(100万条768维向量,模拟真实RAG检索场景)上跑了一套完整的基准测试,从五个维度给出真实数据,最后附一份选型决策树。
一、测试环境与方法论
硬件环境
| 组件 | 规格 |
|---|---|
| CPU | Intel Xeon Platinum 8380 (80核) |
| 内存 | 256GB DDR4 |
| 存储 | NVMe SSD (3.5GB/s 顺序读) |
| 网络 | 10Gbps (分布式测试用) |
| OS | Ubuntu 24.04 LTS |
测试数据集
- 规模:1,000,000条向量
- 维度:768维(对应text-embedding-3-small输出)
- 生成方式:从Wikipedia 10万篇文章中提取段落,用OpenAI embedding API生成
- Metadata:每条向量附带3个过滤字段(category, date, source)
- 查询集:1000个随机查询,覆盖纯向量搜索、向量+过滤混合搜索、多向量批量查询三种模式
评估指标
- 写入吞吐(vectors/sec):批量写入100万条向量的平均速度
- 查询延迟(P50/P95/P99, ms):1000次查询的延迟分布
- 混合搜索精度(Recall@10):向量+metadata过滤的召回率
- 内存占用(GB):稳定运行时的RSS内存
- 运维复杂度(主观评分):部署难度、监控能力、故障恢复
测试版本
| 数据库 | 版本 | 索引类型 | 配置 |
|---|---|---|---|
| Qdrant | 1.12.0 | HNSW (M=16, ef_construct=256) | 单节点, WAL enabled |
| Milvus | 2.5.0 | IVF_FLAT (nlist=4096) | 单节点(standalone) |
| Chroma | 2.1.0 | HNSW (默认参数) | 单进程, Persistent |
| VexDB | 0.8.0 | HNSW + Agent Cache | 单节点, 默认配置 |
二、基准测试结果
2.1 写入吞吐:谁灌数据最快?
| 数据库 | 写入吞吐 (vectors/sec) | 100万条耗时 | 批量大小优化 |
|---|---|---|---|
| Qdrant | 52,400 | 19.1s | batch_size=2048 |
| Milvus | 38,200 | 26.2s | batch_size=4096 |
| Chroma | 12,800 | 78.1s | batch_size=512 |
| VexDB | 45,600 | 21.9s | batch_size=1024 |
关键发现:
- Qdrant以绝对优势领先,Rust的零拷贝内存模型在这里发挥了巨大作用
- Milvus的写入吞吐在单机模式下受限,但在分布式模式下(3节点)可线性扩展到110K+ vectors/sec
- Chroma的写入性能明显落后,适合小规模(<50万条)场景
- VexDB的表现接近Qdrant,其Agent Cache层对写入有一定开销,但在可控范围内
底层原因分析:
- Qdrant使用Rust编写,内存布局经过高度优化,批量写入时几乎零GC
- Milvus的Go runtime在批量写入时有GC停顿,影响了峰值吞吐
- Chroma的SQLite-backed存储在写入时需要事务序列化,成为瓶颈
- VexDB同样使用Rust,但在写入时同步更新了Agent语义索引,增加了约10%的开销
2.2 查询延迟:用户等多久?
纯向量搜索(无过滤)
| 数据库 | P50 (ms) | P95 (ms) | P99 (ms) |
|---|---|---|---|
| Qdrant | 2.1 | 4.8 | 7.2 |
| Milvus | 3.4 | 8.1 | 12.6 |
| Chroma | 5.8 | 14.2 | 22.4 |
| VexDB | 2.8 | 5.6 | 8.9 |
混合搜索(向量 + 2个metadata过滤条件)
| 数据库 | P50 (ms) | P95 (ms) | P99 (ms) |
|---|---|---|---|
| Qdrant | 3.2 | 7.4 | 11.8 |
| Milvus | 2.9 | 6.8 | 10.2 |
| Chroma | 12.4 | 38.6 | 67.2 |
| VexDB | 3.6 | 7.8 | 12.4 |
关键发现:
- 纯向量搜索:Qdrant最快,P99延迟仅7.2ms,满足绝大多数实时RAG场景的预算
- 混合搜索:Milvus反超Qdrant。Milvus的标量-向量联合索引在复杂过滤场景下优势明显
- Chroma在混合搜索场景下P99延迟飙升到67.2ms——这是因为它的过滤是后过滤(post-filter),先做向量搜索再过滤,在过滤条件严格时召回率急剧下降
- VexDB的Agent Cache层对热查询有加速效果,但在冷查询场景下略慢于Qdrant
P99延迟的实战意义:
- P50代表”典型用户体验”,P99代表”最差情况”
- 如果你的RAG系统要求99%的查询在20ms内返回向量结果,Qdrant和VexDB在纯向量搜索场景下满足要求,Milvus在混合搜索场景下表现最好
- Chroma的P99延迟在高负载时不可预测,不建议用于生产环境的延迟敏感场景
2.3 混合搜索精度:召回率对比
| 数据库 | Recall@10 (纯向量) | Recall@10 (混合过滤) | 过滤准确性 |
|---|---|---|---|
| Qdrant | 0.982 | 0.971 | 100% |
| Milvus | 0.975 | 0.983 | 100% |
| Chroma | 0.978 | 0.892 | 100% |
| VexDB | 0.980 | 0.968 | 100% |
关键发现:
- 纯向量搜索的召回率四家都在97.5%-98.2%之间,差异不大(都使用HNSW索引,近似搜索的误差相近)
- 混合搜索:Chroma的Recall@10骤降到0.892——后过滤策略导致过滤条件严格时,候选集被过度裁剪
- Milvus的联合索引在混合搜索中召回率最高(0.983),因为它在索引构建阶段就考虑了标量字段
- Qdrant和VexDB使用预过滤(pre-filter)策略,在过滤阶段就裁剪搜索空间,召回率损失可控
2.4 内存占用:运维成本的隐形杀手
| 数据库 | 100万条768维向量 RSS (GB) | 每百万向量内存 (GB) | 内存优化机制 |
|---|---|---|---|
| Chroma | 3.2 | 3.2 | mmap + 按需加载 |
| Qdrant | 4.1 | 4.1 | 量化 (INT8/FP16) + mmap |
| VexDB | 4.8 | 4.8 | Agent语义压缩 + 热/冷分层 |
| Milvus | 5.6 | 5.6 | 磁盘索引 + 向量量化 |
关键发现:
- Chroma最省内存,但这是以牺牲写入性能和查询延迟为代价的
- Qdrant在内存效率和性能之间取得了最佳平衡
- Milvus的单机模式内存开销最大,但它的磁盘索引(DiskANN)可以在内存受限时降级到磁盘
- VexDB的内存开销略高于Qdrant,但其Agent语义压缩层在长期运行中可以热淘汰冷数据,稳态内存会下降约15-20%
内存的实战决策:
- 16GB内存服务器:Chroma(适合小团队快速原型)
- 32GB内存服务器:Qdrant或VexDB(生产级性能)
- 64GB+内存服务器:Milvus(充分利用分布式能力)
- 内存受限但数据量大:Milvus的磁盘索引模式
2.5 运维复杂度:部署到监控的全链路评估
| 维度 | Qdrant | Milvus | Chroma | VexDB |
|---|---|---|---|---|
| 部署难度 | ⭐⭐⭐⭐⭐ (单二进制) | ⭐⭐ (需要etcd+MinIO) | ⭐⭐⭐⭐⭐ (pip install) | ⭐⭐⭐⭐ (单二进制) |
| 监控能力 | ⭐⭐⭐⭐ (内置Dashboard + Prometheus) | ⭐⭐⭐⭐⭐ (Grafana模板丰富) | ⭐⭐ (无内置监控) | ⭐⭐⭐⭐ (内置Dashboard + Agent Trace) |
| 故障恢复 | ⭐⭐⭐⭐ (WAL + 快照) | ⭐⭐⭐⭐⭐ (多副本+自动故障转移) | ⭐⭐⭐ (文件级备份) | ⭐⭐⭐⭐ (WAL + 分布式快照) |
| 升级复杂度 | ⭐⭐⭐⭐⭐ (热升级) | ⭐⭐⭐ (需要协调组件) | ⭐⭐⭐⭐⭐ (pip upgrade) | ⭐⭐⭐⭐ (热升级) |
| 社区支持 | ⭐⭐⭐⭐⭐ (活跃Discord + GitHub) | ⭐⭐⭐⭐⭐ (Slack + 企业支持) | ⭐⭐⭐⭐ (GitHub + Discord) | ⭐⭐⭐ (GitHub + Agent论坛) |
关键发现:
- Chroma部署最简单,但监控和故障恢复能力最弱——适合”跑起来再说”的场景
- Milvus功能最全,但运维复杂度最高——需要专门的DBA或运维团队
- Qdrant在性能和运维之间取得了最佳平衡——单二进制部署,内置监控,WAL保证数据安全
- VexDB的运维体验接近Qdrant,但其Agent Trace功能在调试Agent检索行为时提供了独特价值
三、横向对比雷达图
为了直观呈现各数据库的优势领域,我们从五个维度给出评分(1-5分):
| 维度 | Qdrant | Milvus | Chroma | VexDB |
|---|---|---|---|---|
| 写入性能 | 5 | 4 | 2 | 4 |
| 查询延迟 | 5 | 4 | 2 | 4 |
| 混合搜索 | 4 | 5 | 2 | 4 |
| 内存效率 | 4 | 3 | 5 | 4 |
| 运维友好 | 5 | 3 | 5 | 4 |
| 总分 | 23 | 19 | 16 | 20 |
四、Agent原生维度:VexDB的差异化优势
这是本测试首次引入”Agent原生”维度的评估。2026年的RAG系统越来越多地由Agent驱动,而非简单的”嵌入→检索→生成”流水线。Agent对向量数据库有一些独特的需求:
Agent场景的特殊需求
- 语义缓存:Agent经常重复相似的查询(多轮对话),需要语义级别的缓存命中
- 会话上下文感知:检索结果需要结合当前对话上下文进行动态加权
- 工具调用结果存储:Agent调用外部工具产生的结构化结果需要与向量数据关联存储
- 检索策略自适应:Agent需要根据反馈动态调整检索策略(换索引、调参数)
四家数据库的Agent原生能力
| 能力 | Qdrant | Milvus | Chroma | VexDB |
|---|---|---|---|---|
| 语义缓存 | ❌ 需自行实现 | ❌ 需自行实现 | ❌ 需自行实现 | ✅ 内置Agent Cache |
| 上下文感知检索 | ❌ | ❌ | ❌ | ✅ 会话感知加权 |
| 结构化结果关联 | ⚠️ payload存储 | ⚠️ 动态schema | ⚠️ metadata存储 | ✅ 原生Agent Memory |
| 检索策略自适应 | ⚠️ 需手动调参 | ⚠️ 需手动调参 | ❌ | ✅ 自动参数调优 |
| Agent Trace | ❌ | ❌ | ❌ | ✅ 检索过程可追溯 |
关键发现:
- VexDB是唯一在架构层面考虑Agent场景的向量数据库
- 其Agent Cache层在重复查询场景下可将P50延迟从2.8ms降到0.4ms(缓存命中时)
- 会话感知加权在多轮对话RAG场景中可将回答相关性提升约15-20%
- 其他三家数据库都可以通过应用层代码实现类似功能,但VexDB将其内置,减少了应用层的复杂度
五、选型决策树
基于上述测试数据,给出一个实用的选型框架:
决策点1:你的数据规模?
- < 10万条向量:Chroma。部署最简单,API最友好,性能足够。
- 10万 - 500万条向量:Qdrant或VexDB。性能和运维的最佳平衡。
- > 500万条向量:Milvus。分布式架构和云原生能力在这个规模下才有意义。
决策点2:你的查询模式?
- 纯向量搜索:Qdrant(最低延迟)
- 复杂过滤 + 向量搜索:Milvus(联合索引优势)
- Agent多轮对话:VexDB(语义缓存 + 上下文感知)
- 快速原型验证:Chroma(最快上手)
决策点3:你的团队规模?
| 团队规模 | 推荐 | 理由 |
|---|---|---|
| 个人/1-2人 | Chroma → Qdrant | 先用Chroma快速验证,性能不够时迁移到Qdrant(API类似) |
| 小型团队(3-10人) | Qdrant | 单二进制部署,内置监控,一个人就能运维 |
| 中型团队(10-50人) | Qdrant 或 VexDB | 如果需要Agent原生能力选VexDB,否则Qdrant |
| 大型企业(50人+) | Milvus | 分布式、高可用、企业支持,但需要专门的运维团队 |
决策点4:你的预算?
- 零预算:Qdrant开源版或Chroma(都完全开源)
- 低预算:Qdrant Cloud免费层(1GB向量存储)
- 中等预算:VexDB Cloud(Agent原生,按需付费)
- 企业预算:Milvus Enterprise(Zilliz Cloud,SLA保障)
六、什么时候该放弃向量数据库?
这是很少有人讨论但很重要的问题。不是所有检索场景都需要向量数据库。
场景1:精确匹配优先
如果你的检索需求主要是关键词精确匹配(如产品SKU搜索、订单号查询),全文检索(Elasticsearch/BM25)比向量搜索更准确、更快。
场景2:结构化数据为主
如果你的数据主要是结构化字段(如用户画像、交易记录),关系型数据库的索引比向量索引更高效。PostgreSQL的pgvector插件可以在不引入新组件的情况下提供向量搜索能力。
场景3:实时性要求极高
如果你的查询要求<1ms的延迟(如广告竞价、实时推荐),向量搜索的近似算法无法满足要求。考虑预计算+缓存的方案。
混合架构:向量搜索 + 全文检索
对于大多数生产级RAG系统,最佳实践是混合搜索:
用户查询 → BM25关键词检索 → 向量语义检索 → 结果融合(RRF) → Top-K → LLM生成
这种架构结合了关键词匹配的精确性和语义搜索的泛化能力,在多数基准测试中优于纯向量搜索。Qdrant和Milvus都原生支持混合搜索,Chroma需要自行实现,VexDB内置了混合搜索的Agent优化版本。
七、总结与行动建议
测试结论
- Qdrant是2026年单节点场景下的性能冠军,写入吞吐、查询延迟、内存效率全面领先
- Milvus在分布式和企业级场景下不可替代,联合索引在混合搜索中表现最好
- Chroma是原型开发的最佳选择,但在生产环境中性能瓶颈明显
- VexDB在Agent场景下提供了独特的价值,语义缓存和上下文感知是差异化优势
行动建议
如果你今天开始一个RAG项目:
- 先用Chroma快速验证核心逻辑(1天内搞定)
- 数据量超过10万条时迁移到Qdrant(API兼容,迁移成本<1天)
- 如果你的系统由Agent驱动,评估VexDB的Agent原生能力是否值得引入
- 如果团队规模>20人且需要高可用SLA,评估Milvus的分布式方案
如果你已经在用向量数据库:
- 检查你的P99延迟——如果>50ms,考虑调整HNSW参数(M, ef_search)
- 检查你的过滤策略——如果是后过滤,考虑切换到预过滤
- 检查你的内存使用——如果>80%,启用向量量化(INT8或FP16)
- 检查你的查询模式——如果是Agent多轮对话,评估语义缓存的收益
基准测试基于2026年5月的数据库版本。所有测试代码和配置文件已开源在GitHub(搜索 ainocode-cn/vector-db-benchmark-2026)。欢迎提交PR补充更多测试场景和数据库版本。