最近在搞一个AI Agent项目,需要做长对话记忆和知识库检索,用到了RAG。现在工程上有个纠结的点:向量数据库到底选Qdrant还是Milvus?我们团队对性能要求比较高,数据量大概在千万级,但服务器资源有限,不想上太重的分布式。看文档感觉Qdrant部署轻量,但Milvus的生态和过滤查询功能又很成熟。有没有大佬在实际生产环境中踩过坑?或者有其他更合适的开源方案推荐?另外,如果后续要支持混合检索(向量+关键词),这两个哪个改造起来更顺手?希望有真实经验的人来聊聊,谢谢。
RAG项目向量数据库选型,Qdrant和Milvus怎么权衡?
全部回复
共 116 条千万级这个量级其实两个都能扛,但你要是服务器紧巴巴的,Milvus单机部署那套配置就有点肉疼了。Qdrant在docker里跑起来确实省心,而且它的filter跟payload设计得很顺手,混合检索直接用内置的sparse vector做关键词,不用额外接ES。不过Milvus的upsert和复杂查询确实更稳,尤其你后面要上高并发的话,它的资源调度上限会高不少。
千万级数据量其实两个都能扛,但既然服务器资源有限,真心建议先试Qdrant,单机部署太省心了,我们之前用Milvus光是配分布式就折腾掉两周。混合检索的话Qdrant内置的稀疏向量配合BM25也挺顺手,Milvus虽然filter强但需要额外搭ES才能做关键词,链路长不少。不过如果你后面要上亿级数据再考虑Milvus不迟,现阶段别为用不上的分布式买单。
千万级数据其实两个都能扛,但你这服务器资源有限的话我真心建议先排除Milvus。我们之前就是被Milvus的依赖拖垮过,etcd、minio、pulsar那套一上,光运维就够喝一壶的,后来换到Qdrant单机加个索引直接跑,延迟反而更稳。不过你说的过滤查询确实是Qdrant的弱项,它的filter是后置的,数据量大了带复杂条件会明显掉速,Milvus在标量过滤这块的优化确实更成熟。混合检索的话,Qdrant虽然也有稀疏向量支持,但说实话都是半吊子,真要玩好还得自己拼个ES或者用单独的关键词服务,Milvus那边的话最新版集成的BM25也还凑合,但同样别指望开箱即用。我倒建议你看看Elasticsearch的向量检索,如果你们现有技术栈里本来就有ES,直接升级到8.x版本用kNN搜索,既能把关键词和向量放一起查,又不用多维护一个数据库,千万级数据在单节点上如果资源给够其实也能跑,就是内存要吃紧点。另外想问下你们对写入吞吐的要求高吗,Qdrant批量写入在大数据量下容易触发segment合并导致抖动,这个坑我们踩过,得提前做调优预案。
千万级数据量但资源有限,闭眼选Qdrant,单机性能真心够用,Milvus分布式运维太折腾人。
混合检索这块Qdrant加个BM25扩展挺顺的,我们就是这么干的,Milvus那套反而复杂些。
千万级数据量其实Qdrant单机就能扛,我们之前从Milvus迁过来的,部署省心太多,过滤这块Qdrant现在也不差了。混合检索的话,两个都得自己拼ES或别的倒排索引,Qdrant的API反而更直观些,Milvus那个filter表达式前期学习成本有点高。你们如果预算内能接受单机,先跑个Qdrant的benchmark再说。
千万级数据加资源有限,Qdrant基本是更稳的选择,单机部署省心,HNSW性能也够用。Milvus生态确实强,但想跑顺了往往得上集群,运维成本不低。混合检索这块Qdrant原生支持稀疏向量,接BM25或者SPLADE挺方便,Milvus得靠外挂ES那套,链路更长。你们团队要是没有专职运维,建议先用Qdrant跑起来,真到瓶颈再换也不迟。
千万级数据单机Qdrant其实挺稳的,过滤查询虽然不如Milvus那么灵活,但日常够用,内存占用也友好。混合检索的话Qdrant原生支持稀疏向量,接BM25挺顺的,Milvus得自己拼,麻烦一点。要是不想折腾分布式,Qdrant更省心,但你们要是过滤场景特别复杂,Milvus的表达式确实香。
我们之前千万级数据也纠结过这俩,最后选了Qdrant,主要是单机部署真省心,内存占用比Milvus低不少,资源紧张的话这点很关键。混合检索Qdrant原生就支持稀疏向量,配个BM25或者SPLADE不用大改架构,Milvus那边得额外搭ES做关键词部分,运维成本上来了。不过Milvus的标量过滤确实成熟,如果你们过滤条件特别复杂,它可能更稳。千万级Qdrant单机完全扛得住,除非QPS特别高,不然不用急着上分布式。
我们生产上用的Qdrant,千万级数据单机跑得挺稳,资源占用比Milvus友好不少。混合检索的话Qdrant原生支持稀疏向量,接BM25或SPLADE都算顺手,Milvus那边得靠外挂ES做关键词。不过Milvus的标量过滤确实更强,复杂条件多的话要掂量下。你们要是运维人手不多,我倾向Qdrant先跑起来。
千万级数据Qdrant单机就够用了,混合检索它原生支持稀疏向量,比Milvus改造省事。
千万级数据量其实Qdrant单机扛得住,我们线上差不多这个规模,内存给够就行,运维比Milvus省心不少。Milvus那套etcd+minio+pulsar的架构,小团队养起来真的累。混合检索这块Qdrant原生支持稀疏向量,跟稠密向量做融合比较顺手,Milvus要自己搭ES或者用它的sparse模式,改造量不小。你们要是没打算上K8s集群,我建议先Qdrant跑起来,真撑不住了再考虑迁移。
我们线上用的Qdrant,千万级数据单机跑得挺稳,内存占用比Milvus友好不少,就是分布式那块确实弱一些。混合检索当时自己写了层BM25和向量分数融合,Qdrant的payload过滤够灵活,改起来不算折腾。Milvus功能全但组件多,资源紧张的话运维成本得算进去。你们要是数据量还会涨,建议先想清楚分片策略再定,不然迁移挺烦的。
千万级数据加上资源有限,Qdrant基本是更省心的选择,单机跑起来内存占用比Milvus舒服不少。Milvus的标量过滤和混合检索确实成熟,但你要是没上分布式,它那套架构反而有点包袱。混合检索这块Qdrant原生支持稀疏向量,改造起来比Milvus顺手,不用额外搭ES。我们线上千万级用Qdrant单节点加副本,延迟挺稳的,就是记得把HNSW参数调一下。
千万级数据加资源有限,Qdrant单机基本够用了,Milvus那套依赖etcd和MinIO的架构部署起来确实偏重。但混合检索这块得注意,Qdrant原生稀疏向量支持还行,Milvus的SPARSE_FLOAT_VECTOR配合BM25也比较成熟,改造成本差不多。我们生产上用的Qdrant,过滤条件复杂时性能会掉,如果业务里标量过滤特别多可能得再压测下。
千万级数据、资源又有限,Qdrant确实更省心,单机跑起来性能也不差,我这边实测过滤加向量检索延迟挺稳的。但Milvus的标量过滤和生态确实成熟,尤其你要做混合检索,它原生支持稀疏向量,改造量小很多。不过Milvus轻量模式虽然能单机部署,资源占用还是比Qdrant高一截,得看你们机器扛不扛得住。混合检索这块其实也可以考虑Qdrant加个ES做关键词,就是多维护一个组件,看你们运维精力了。
千万级这个量级其实挺微妙的,单机Qdrant完全扛得住,但如果过滤条件复杂再加上高并发,内存会是个隐患。我们之前用Milvus跑过类似规模的数据,最大的感受是它的标量过滤和混合检索确实成熟,但运维成本真不低,etcd、MinIO、Pulsar一套下来小团队很容易被拖住。Qdrant的payload过滤性能出乎意料地好,而且Rust写的,资源占用比Milvus省不少,单机部署体验很舒服。混合检索这块Qdrant原生支持稀疏向量,做向量加关键词的混合打分不用自己拼太多胶水代码,Milvus虽然有全文检索但配置起来更折腾。如果你们不打算上分布式,我倾向Qdrant,但要注意它的分布式能力比Milvus弱,将来数据涨到亿级可能要重新考虑架构。另外可以看看Weaviate,混合检索是它的强项,就是社区版功能限制需要提前确认。