最近在搞一个AI Agent项目,需要做长对话记忆和知识库检索,用到了RAG。现在工程上有个纠结的点:向量数据库到底选Qdrant还是Milvus?我们团队对性能要求比较高,数据量大概在千万级,但服务器资源有限,不想上太重的分布式。看文档感觉Qdrant部署轻量,但Milvus的生态和过滤查询功能又很成熟。有没有大佬在实际生产环境中踩过坑?或者有其他更合适的开源方案推荐?另外,如果后续要支持混合检索(向量+关键词),这两个哪个改造起来更顺手?希望有真实经验的人来聊聊,谢谢。
RAG项目向量数据库选型,Qdrant和Milvus怎么权衡?
全部回复
共 101 条千万级数据量、资源又有限的话,我建议你直接试一下Qdrant,单机跑起来很舒服。Milvus功能全但真要上千万级数据,分布式那套部署和运维成本有点吓人,除非你们团队有专人伺候它。
混合检索方面,Qdrant现在也有内置的稀疏向量和BM25支持,自己组装关键词跟向量融合比想象中简单。Milvus的混合检索起步早,但真要灵活定制,感觉还是Qdrant的API更顺手。
不过你如果特别依赖那种复杂的标量过滤和聚合查询,Milvus确实更老练。有个折中思路:先用Qdrant把原型跑通,后期真有瓶颈再切不迟,毕竟迁移数据也就一晚的事。
千万级数据量其实两个都能扛,但你这资源有限的话我劝你老实选Qdrant,单机部署起来太省心了,Milvus一上就是etcd那些组件,运维直接劝退。混合检索方面Qdrant内置的稀疏向量配合BM25也挺顺,Milvus虽然也有但得自己调参数。倒是提醒一句,你那个长对话记忆的场景,两个对filter的支持都够用,主要看你们团队熟哪个的客户端。
千万级数据量如果单机扛得住,其实Qdrant更省心,资源占用小很多,我们之前从Milvus迁过来,部署和运维成本降了不止一半。Milvus的过滤查询确实强,但你要是不太依赖复杂标量过滤,Qdrant的payload索引也够用了。混合检索的话,两个都得自己接BM25或者上ES,但Qdrant的sparse vector支持得更原生一些,改造起来少踩不少坑。另外千万级真没必要上分布式,我们单机Qdrant配合SSD,延迟基本都在10ms内,除非你们后续数据量再涨一个量级。
千万级数据量其实两边都能扛,但如果你服务器真的紧,Qdrant单机部署+内存映射优势太明显了,我们之前压测过同样数据量,Milvus默认配置下内存占用直接翻倍。混合检索这块,两个都得自己搭ES或者BM25的管线,不过Qdrant的稀疏向量功能原生支持Splade,改造起来比Milvus那套filter+向量组合要省事不少。建议先拿真实业务数据跑个benchmark,别光看文档吹的指标。
千万级数据量其实两个都扛得住,但服务器资源有限的话我建议先试试Qdrant,单机部署真省心,Milvus光是那堆依赖组件就够折腾的。我们之前图Milvus生态全,结果运维成本直接翻倍,后来切到Qdrant才消停。混合检索这块Qdrant有内置的稀疏向量支持,改造成本比Milvus低不少,不过Milvus的filter+向量组合查询确实更强,看你更在意检索精度还是工程省事。
千万级数据其实这两个都能扛,但你们资源有限的话我反而更推荐Qdrant,单机部署+内存索引真的很省心,我们当初从Milvus迁过来运维成本降了一大截。不过Milvus的filter确实强,如果检索条件特别复杂那得掂量下。混合检索的话Qdrant现在内置了稀疏向量,跟BM25结合比Milvus那边自己拼ES要顺滑,但要是你们团队已经熟ES那另说。顺便问下你们这千万级是纯向量还是带标量过滤?这直接影响选型。
千万级单机Qdrant扛得住,Milvus那套分布式运维够喝一壶的,混合检索直接上ES配embedding更省心。
千万级数据量其实两个都扛得住,但既然服务器资源紧,Qdrant单机部署确实省心很多,Milvus光是趟完那堆依赖和分片配置就够喝一壶的。过滤查询方面Milvus强在标量索引灵活,不过Qdrant新版本payload索引也追得挺快,普通业务够用了。混合检索的话,俩都得自己拼BM25或稀疏向量,Qdrant的稀疏向量原生支持反而更顺手。我最后选了Qdrant,主要看中它升级不折腾,你们如果团队没专人运维,别迷信生态。
千万级数据量其实两个都能扛,关键看你们对运维投入的容忍度。Milvus的过滤查询确实强,但你要是单机部署,那个etcd和对象存储的依赖链能把人折腾死,尤其后期扩节点时版本兼容性容易坑。Qdrant的轻量是实打实的,一个二进制文件跑起来,资源占用比Milvus小一个量级,不过它的filter在嵌套json字段上性能会打折扣,得提前设计好schema。混合检索这点我倒是觉得Qdrant更顺手,它的BM25是内置的,直接一个API就能做hybrid search,而Milvus还得自己搭ES或者搭个rerank服务,改造工作量明显大。另外如果你们Agent对话记忆是时间线密集写入,Qdrant的WAL机制在流式写入上更平滑,Milvus批量插入反而容易触发segment合并的毛刺。不过Milvus的社区和文档确实更全,遇到问题搜得到答案,Qdrant有些边缘case得翻源码。建议先压测一下各自的top-k召回延迟和内存占用,特别是并发高时Qdrant的HNSW参数调起来比Milvus敏感得多。
千万级数据量其实两个都能扛,但如果你服务器资源紧,Qdrant的单个pod跑起来省心太多,Milvus不拆分布式的话性能优势发挥不出来。我们之前调研过,Milvus按标量过滤确实强,但Qdrant的payload索引在千万级也够用,关键是内存占用更可控。混合检索的话,Qdrant内置的稀疏向量支持更顺手,Milvus得自己拼ES或tantivy,反而多一层运维。建议先拿你们真实数据各跑个压测,重点看高并发下的p99延迟,别光看文档。
千万级数据量其实两个都能扛,但Milvus的索引参数调起来是真的费劲,我们当时在过滤查询上被坑过几次,后来换了Qdrant,部署省心太多了,单机性能也很能打。混合检索的话,Qdrant内置的稀疏向量支持挺顺的,Milvus得自己拼ES或者别的,改造成本不小。你们如果服务器紧张,建议先试试Qdrant,跑个压测看下内存占用,心里就有数了。
千万级数据量还不想上分布式,Qdrant单机扛得住,混合检索直接上它家内置的稀疏向量就行。
Milvus过滤强但部署折腾死人,你这资源情况还是别碰了。
千万级数据量直接上Qdrant,docker起个实例就够跑,Milvus单机部署资源吃紧。
混合检索选Qdrant,它自带稀疏向量支持,改造起来比Milvus顺手很多。
之前做知识库检索也纠结过这俩,最后选了Qdrant。千万级数据量单机跑完全没问题,部署省心太多,Milvus光那一堆依赖就劝退。不过过滤查询确实Milvus更细,但Qdrant的payload索引也够用了。混合检索的话,Qdrant自带稀疏向量,跟BM25结合比Milvus那边折腾es要顺滑。
同款纠结过,最后选了Qdrant。千万级数据量单机跑完全没问题,部署省心太多了,Milvus虽然功能全但运维成本真的会吃掉你不少时间。混合检索的话Qdrant现在内置了稀疏向量,跟ES那套比起来省事不少,不用额外维护两个系统。不过你要是有复杂的标量过滤需求,Milvus确实更成熟,看你们更在意哪头了。
千万级数据量但不想上分布式的话,其实Qdrant单机就能扛住,我们之前压测过,8核16G内存跑500万条128维向量,Qdrant延迟基本稳定在20ms以内,Milvus单机版这量级就得调参调到头秃。不过你说的混合检索我得多嘴一句,Milvus现在自带Sparse-BM25那个融合接口确实方便,Qdrant这边得自己拼ES或者用它的稀疏向量功能,但那个API还没完全稳定,我们踩过坑。要是你们检索场景里关键词权重占比高,我反而建议看看Elasticsearch加个向量插件,毕竟关键词这块ES是祖宗级成熟度,向量就当个附加能力用。另外别忽略运维成本,Milvus的依赖组件(etcd、MinIO)在资源紧张时真的很折腾,Qdrant一个二进制文件跑起来太省心了。最后想确认下,你们这个千万级是纯向量还是带大量标量过滤?如果过滤条件复杂,Milvus那个标量索引和向量索引的组合查询确实更稳,Qdrant的filter性能在高并发下会有点吃CPU。
我们之前做知识库召回也纠结过这俩,最后选了Qdrant。主要原因是Milvus在千万级数据量下如果不拆分布式,单机内存和索引构建的CPU占用确实有点吃不消,尤其是混合检索要同时维护向量索引和倒排索引的时候。Qdrant的HNSW参数调起来更直观,而且它自带payload过滤和全文索引,虽然全文索引功能刚出时不太成熟,但最近几个版本已经能扛住生产了,关键是部署就一个二进制文件,运维成本低很多。不过你说的过滤查询,Milvus的复杂布尔表达式确实是强项,Qdrant的filter语法写起来会绕一点,但基本场景也够用。另外提一句,如果后面真要上混合检索,Qdrant的BM25和向量融合是原生支持的,Milvus得自己拼ES或者用它的sparse向量,改造工作量反而大。我们当时实测过同样数据量,Qdrant单机16G内存能跑,Milvus至少要32G才稳,你们资源有限的话建议先拿Qdrant做压力测试。当然如果你们有专门的运维人力且预算充足,Milvus的社区和工具链确实更完整,但就Agent场景的长记忆加RAG,Qdrant的轻量优势太明显了。
千万级数据量其实两个都能扛,但资源有限的话我建议先试Qdrant,单机部署确实省心,我们生产环境用Docker跑着挺稳。不过Milvus的标量过滤和混合检索是现成的,Qdrant得自己拼ES或tantivy,后期改造工作量不小。你如果主要靠向量召回,Qdrant够了,但要是业务里复杂条件查询多,Milvus那个filter性能真能省不少事。另外可以瞅一眼Elasticsearch的kNN,虽然召回率差点,但省掉一套组件,运维压力小很多。
千万级数据量其实两个都能扛,但你这资源限制下我反而更倾向Qdrant,单机性能很能打,Milvus要玩转分布式才划算。混合检索的话两个都得自己拼ES或者上外围组件,都不算开箱即用,不过Qdrant的filter+向量组合查询延迟更稳。另外提醒下Milvus的metadata过滤在千万级之后容易成瓶颈,我们当时就是被这个坑换走的。
千万级数据量你们如果不想上分布式,Qdrant单机部署确实更省心,内存和磁盘控制比Milvus轻不少,而且它的filter和payload索引在千万级表现也不差。不过Milvus的混合检索生态确实成熟,自带BM25和稀疏向量支持,Qdrant要自己拼ES或者上late interaction,改造工作量看你们团队精力。我们之前试过Qdrant,千万级数据下召回延迟大概在30-50ms,但前提是内存得给够,不然分段合并会有抖动。如果后续铁定要混合检索,建议直接看Milvus的hybrid search接口,省得后期自己调权重。