最近在给公司内部文档搭一个RAG问答系统,数据量不大,大概几十万条chunk,但后面可能会涨到百万级。目前用sentence-transformers生成768维向量,检索要求就是普通的top-k相似度,偶尔需要按部门字段过滤。试了Milvus单机版,部署有点重,依赖etcd和MinIO,小服务器跑起来内存吃紧。看Qdrant好像轻量很多,Rust写的,单二进制就能跑,但担心生态和后续扩展性。有没有实际用过的老哥说说,小团队到底选哪个更省心?主要不想后期迁移折腾。
Milvus和Qdrant到底怎么选?小团队做RAG有点纠结
全部回复
共 9 条几十万到百万这个量级,Qdrant单机完全扛得住,过滤查询也是它强项,而且Rust单二进制部署确实省心,不用伺候etcd那套。不过你们要是已经在用Milvus跑通了,迁移成本也得算进去,别为了轻量折腾一圈又回来。我这边小团队用Qdrant快一年了,百万级带payload过滤没啥压力,生态虽然没Milvus热闹但文档够用。真担心扩展性的话,Qdrant也支持分布式,只是没Milvus那么成熟,看你们愿不愿意赌它迭代速度了。
几十万到百万这个量级,Qdrant确实够用了,我们团队去年也是类似场景,单机docker跑起来内存占用比Milvus舒服太多,payload过滤也挺顺手。不过要提醒一点,Qdrant的分布式版本是要商业授权的,如果哪天单机扛不住想横向扩,要么掏钱要么自己折腾分片。Milvus虽然重,但集群方案是开源的,生态文档也更成熟。你们百万级如果只是读多写少,Qdrant单机大概率能撑很久,迁移的顾虑可以先放放。
几十万到百万级这个量级,说实话两个都扛得住,真正要纠结的不是性能而是运维成本。我去年给一个类似规模的项目选过Qdrant,单二进制加配置文件就能跑,docker compose两行搞定,内存占用比Milvus舒服太多,小机器上基本无感。过滤这块Qdrant的payload索引做得挺顺手,按部门字段过滤加top-k,性能没什么可挑的。生态确实比Milvus薄一点,但它的REST和Python客户端该有的都有,真要说坑就是文档有时候更新滞后,遇到问题得翻GitHub issue。你们现在最该想清楚的是百万级之后还涨不涨,如果就停在百万上下,Qdrant完全够用而且省心;要是预期奔着千万甚至上亿去,那Milvus的分布式架构早晚要上,现在换反而少一次迁移。不过Milvus那个etcd加MinIO的依赖对小团队确实劝退,可以先拿Qdrant把业务跑通,等真到瓶颈了再考虑换,向量库这层抽象做好的话迁移没想象中那么痛。
几十万到百万级这个量级,其实两个都能扛住,真正拉开差距的是运维体感。我之前用Milvus单机也是被etcd和MinIO劝退的,明明就一台机器,非要起一堆组件,内存直接飙上去,后来换Qdrant一个二进制加个配置文件就跑起来了,省心太多。Qdrant的payload过滤也挺顺手,按部门字段过滤这种需求直接写在查询里就行,不用额外建索引也能用。生态这块确实比Milvus弱一点,但如果你就是普通top-k加标量过滤,根本用不到那些花哨功能,LangChain和LlamaIndex对它的支持也够用了。迁移的事我倒觉得不用太焦虑,两者接口都算清晰,真到百万级以上再考虑换分布式方案,数据导出重灌一遍也就那样。唯一要留意的是Qdrant的量化配置,内存紧张的时候开个标量量化能省不少,但会牺牲一点召回,得自己测一下。
我们也是小团队,最后选了Qdrant,主要就是图它单二进制部署省事,几十万到百万级完全扛得住,按部门过滤用payload索引也够使。Milvus功能确实更全,但etcd加MinIO那套对运维是实打实的负担,除非你们后面要上分布式或者多租户。说实话这个量级迁移成本不高,真涨到千万级再换也来得及,别一开始就被扩展性焦虑绑架。
几十万到百万级这个量级,说实话两个都能扛住,关键还是看你团队愿意花多少精力在运维上。Milvus单机那套etcd加MinIO确实劝退小服务器,我当初也是被这个劝退的,后来换Qdrant单二进制跑起来是真舒服,内存占用也友好不少。你们偶尔要按部门过滤,Qdrant的payload索引做filtered search挺顺手的,这块体验比想象中好。不过生态这块得承认Milvus更热闹,文档、中文社区、各种集成案例都多,遇到坑搜一下基本有人踩过。Qdrant文档其实也够用,就是中文资料少点,英文啃一啃问题不大。百万级以内我个人觉得Qdrant省心,真要担心扩展性,它分布式版本也在,只是小团队前期用不上。至于迁移折腾,两者数据模型差异不算大,真要换也就是重灌一遍向量的事,别让这个绑住手脚。
学到了,感谢分享!
写得挺好,建议补充一些性能数据。
你们这个量级和需求,Qdrant其实挺合适的,几十万到百万chunk单机完全扛得住,payload过滤也够用。我之前也是Milvus单机被etcd和MinIO折腾得够呛,换Qdrant之后一个二进制加个volume就起来了,内存占用小不少。生态确实没Milvus热闹,但Python客户端够用,真到百万级以上再考虑集群也不迟,它也有分布式模式。唯一提醒是提前把过滤字段的索引建好,不然带条件查询会慢,这点比Milvus要手动一些。