最近在搞一个AI Agent项目,需要做长对话记忆和知识库检索,用到了RAG。现在工程上有个纠结的点:向量数据库到底选Qdrant还是Milvus?我们团队对性能要求比较高,数据量大概在千万级,但服务器资源有限,不想上太重的分布式。看文档感觉Qdrant部署轻量,但Milvus的生态和过滤查询功能又很成熟。有没有大佬在实际生产环境中踩过坑?或者有其他更合适的开源方案推荐?另外,如果后续要支持混合检索(向量+关键词),这两个哪个改造起来更顺手?希望有真实经验的人来聊聊,谢谢。
RAG项目向量数据库选型,Qdrant和Milvus怎么权衡?
全部回复
共 101 条千万级单机Qdrant完全扛得住,混合检索直接上它的稀疏向量,Milvus那个分布式运维能烦死你。
千万级数据量直接上Qdrant吧,单机性能够用,运维省心太多,过滤用表达式也能顶住。
混合检索这块Milvus的sparse vector确实成熟,但为了这功能上分布式不值当,可以先Qdrant加ES兜底。
千万级数据量Qdrant单机就能扛,Milvus部署太重,混合检索建议直接看Qdrant的稀疏向量。
我们Qdrant跑了半年,千万级数据单机32G内存稳得很,Milvus那套分布式运维成本太高。
我们团队之前也卡在这个选择题上,最后选了Qdrant。主要原因是Milvus的集群模式对资源要求确实有点狠,单机部署的话性能优势发挥不出来,而且运维成本会吃掉不少开发精力。千万级数据量Qdrant单机其实扛得住,我们压测过,延迟和召回都挺稳的,关键是它那个基于Rust的底层在内存管理上很省心。
不过Milvus的过滤查询确实强,特别是那种带复杂标量条件的混合检索,Qdrant的filter虽然也能写,但嵌套逻辑多了以后性能会明显下滑。如果你后续一定要做向量+关键词的混合,我建议提前看一眼Qdrant的BM25集成,它现在原生支持稀疏向量,改造起来比Milvus那边要调一堆插件省事很多。
还有个小坑,Qdrant的WAL机制在写入量大的时候会有点占磁盘,但换来的是崩溃恢复特别快。我们生产环境跑了大半年,没出过数据不一致的问题。如果你们团队对K8s比较熟,其实也可以考虑用Qdrant的独立部署模式,比全分布式的Milvus轻太多了。
千万级单机Qdrant扛得住,Milvus不上分布式反而更折腾,混合检索建议直接上ES配稠密向量。
我们当初也是这纠结,后来发现Qdrant部署省心,过滤查询够用,千万别为生态牺牲运维复杂度。
千万级数据其实两个都能扛,但服务器资源有限的话我建议先试Qdrant,单机部署确实省心,性能也不差。Milvus功能全但光etcd和pulsar那套依赖就够折腾的。混合检索的话,Qdrant的BM25集成是原生的,改起来快;Milvus得走它的sparse向量或者es搭着用,麻烦一点。你们如果主要玩Agent场景,Qdrant的filter和payload设计更灵活,小团队后期维护成本低。
千万级单机Qdrant完全扛得住,别犹豫,Milvus那套运维成本够你喝一壶的。混合检索直接上Qdrant的BM25,比Milvus改起来省心太多。
Qdrant单机扛千万级没问题,混合检索直接上它自带sparse向量,别折腾Milvus那套了。
千万级数据量如果单机部署,Qdrant的resource占用确实友好很多,我们之前压测过同样数据量内存能差出两倍多。Milvus的过滤查询和混合检索是现成的,但真要上生产你得先接受它那套依赖组件,运维成本不低。不知道你说的混合检索具体是哪种方案,Qdrant现在也支持BM25了,但效果和ES还是有点差距。如果团队没专人维护infra,建议先Qdrant跑起来,后面真有复杂过滤需求再上Milvus也不迟。
千万级数据量其实Qdrant单机加WAL就够扛了,我们当时在8C16G的机器上跑过,延迟和召回都还行。Milvus的过滤查询确实强,但分布式部署和etcd那些组件维护起来真挺费劲的,尤其你们资源有限。混合检索这块,Qdrant走稀疏向量+稠密向量双路召回比较直接,Milvus得自己拼BM25插件,折腾。建议先拿你们真实数据压测下写入和查询的P99,别光看文档。
千万级数据量建议直接上Qdrant,单机部署省心,过滤查询用filter表达式完全够用。混合检索的话,Qdrant的BM25内置支持,比Milvus改起来省事。
千万级数据量还不想上分布式,那基本只能单机扛,这俩在单机场景下差距其实没那么大,反而Qdrant的内存管理更省心。Milvus那个过滤查询看着强,但真要压到千万级加复杂filter,性能波动挺明显的,我们之前测过,需要花不少时间调索引参数。混合检索的话Qdrant自带sparse vector,跟BM25结合比Milvus那边要自己拼Elasticsearch顺手太多,尤其你们还要做长对话记忆,这功能能省不少事。不过Milvus胜在社区文档全,出问题好搜,但部署那套etcd加minio的组合,小团队运维起来确实头大。建议你们先拿真实数据量做benchmark,重点看内存占用和召回延迟,别光看官网宣传。另外如果允许的话,其实可以考虑下Elasticsearch加插件,虽然性能差点,但关键词和向量一套搞定,后续维护也简单。
千万级数据量的话,其实两个都能扛住,但你这资源有限的条件下我劝你优先试Qdrant,单机部署确实香,Milvus虽然过滤查询强但集群模式运维起来够喝一壶的。混合检索这事倒不用太担心,Qdrant现在自带稀疏向量支持,跟BM25结合挺顺的,我们这边后来就是拿它做的。不过你要是特别依赖复杂标量过滤,那Milvus的成熟度确实更顶,就看你愿不愿意为这功能多背点运维成本了。
千万级数据直接Qdrant吧,单机性能很能打,Milvus部署运维能把人磨死。混合检索的话Qdrant的BM25集成比Milvus省心不少。
千万级数据量+资源受限,Qdrant单机部署确实省心,但Milvus的标量过滤在混合检索时能少走不少弯路。
我们生产环境用的Qdrant,千万级性能够用,但混合检索得自己拼ES,Milvus内置的话会更顺手。
我们团队之前也卡在这两个上好久,最后选了Qdrant。主要就是你说的部署轻量,单机跑千万级向量完全没问题,资源占用比Milvus小太多了,尤其你们服务器有限的话,Milvus那套依赖etcd、MinIO啥的光运维就够头疼。但Milvus的filter能力确实强,Qdrant的payload过滤性能在高并发下会有点吃紧,尤其你如果经常要按时间戳或者用户ID做预过滤,得提前压测。
混合检索这块,Qdrant其实更顺手,它原生支持稀疏向量(SPLADE那种),能直接跟稠密向量走同一条检索链路,Milvus的混合检索要自己拼BM25或ES,改造工作量明显更大。不过你千万级数据如果后续涨到上亿,Qdrant单机就吃力了,那时候还得上集群,但Milvus的分布式扩展确实更省心。
另外一个坑是Qdrant的官方客户端对某些语言支持不如Milvus全,如果你团队主力是Java或Go,记得先确认下SDK成熟度。还有个思路,如果你们检索逻辑复杂,不如试下ElasticSearch加向量插件,虽然召回率差点,但关键词和向量融合是真方便。最后想问下,你们对QPS的预期大概多少?这个数字其实会影响最终选型。
千万级数据量如果单机部署,Qdrant的binary量化加HNSW其实挺能打的,内存占用比Milvus友好不少。不过你要是特别依赖标量过滤和复杂条件组合,Milvus的索引机制确实更省心,尤其过滤率低的时候性能差距会拉开。混合检索的话两边都得自己接BM25,但Qdrant的API设计更简洁,改造起来不用碰一堆内部配置。另外可以看看Elasticsearch的kNN模块,如果你们已经有ES集群,少维护一个组件也挺香。
千万级数据其实两个都能扛,但如果你服务器真的紧,Qdrant单机部署省心太多,Milvus那套组件光运维就够喝一壶的。混合检索的话,俩都得自己拼ES或BM25,不过Qdrant的payload过滤在纯向量场景下写起来更顺手。我们之前用Milvus踩过内存爆炸的坑,换Qdrant后资源占用直接降了一半,但你要做好生态工具链没那么全的心理准备。
千万级单机Qdrant够用了,Milvus那套分布式运维成本真能拖垮小团队,混合检索不如直接挂ES。
我们当初就是被Milvus生态忽悠进去,结果光调参就耗了两周,换Qdrant后内存占用直接砍半。
千万级数据量单机Qdrant扛得住,Milvus分布式部署运维够喝一壶的,混合检索建议直接上Qdrant的稀疏向量。
我用Qdrant半年了,千万级数据单机16G内存跑得挺稳,Milvus那个etcd和pulsar依赖劝退。