最近在搞一个AI Agent项目,需要做长对话记忆和知识库检索,用到了RAG。现在工程上有个纠结的点:向量数据库到底选Qdrant还是Milvus?我们团队对性能要求比较高,数据量大概在千万级,但服务器资源有限,不想上太重的分布式。看文档感觉Qdrant部署轻量,但Milvus的生态和过滤查询功能又很成熟。有没有大佬在实际生产环境中踩过坑?或者有其他更合适的开源方案推荐?另外,如果后续要支持混合检索(向量+关键词),这两个哪个改造起来更顺手?希望有真实经验的人来聊聊,谢谢。
RAG项目向量数据库选型,Qdrant和Milvus怎么权衡?
全部回复
共 106 条千万级这个量级其实两个都能扛,但你要是服务器紧巴巴的,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跑起来,真到瓶颈再换也不迟。