最近在搞一个RAG小项目,用bge-m3抽了大概80万条文本向量,之前图省事直接怼进了Elasticsearch,结果召回率一塌糊涂,TopK调到50还是经常漏掉语义相近的句子。现在想正经换个专用向量库,纠结Milvus和Qdrant。看文档感觉Milvus功能全但部署重,Qdrant轻量但怕后期数据量涨了扛不住。有没有大佬实际生产用过?主要关心两点:一是过滤+向量混合检索的延迟,二是10亿级数据下的稳定性。另外,有没有必要为了这个专门上K8s?先谢过各位了。
向量数据库选型求指路:Milvus和Qdrant到底该上哪个?
全部回复
共 25 条80万量级真不用纠结,Qdrant单机够用,等真到亿级再上Milvus也不迟。
过滤+向量混合检索这俩延迟都还行,但Qdrant的payload索引更灵活,K8s暂时没必要。
80万量级真别纠结,Qdrant单机绰绰有余,等过亿再考虑Milvus不迟。
混合检索延迟这俩半斤八两,主要看filter基数,K8s纯属给自己找事。
80万向量其实还没到拼极限性能的时候,Milvus和Qdrant都能扛,但你这问题核心不在量级,而在过滤+向量混合检索的延迟。Qdrant的payload索引和filter下推做得非常细,小项目里延迟能做到个位数毫秒,而且部署就一个二进制,舒服得很。Milvus功能确实全,但etcd、pulsar那一套起来,你光运维就够喝一壶的,除非你团队已经有K8s经验,否则别为了这80万向量硬上。
10亿级的话,Qdrant单机肯定不行,但它分布式模式也成熟了,只是配置起来比Milvus稍微费点手。我个人建议是,先拿Qdrant跑通你的RAG链路,把召回率调好,等真到千万级再考虑迁移,没必要一步到位。K8s的话,除非你已经有集群,否则单机Docker跑Qdrant完全够用,别给自己找事。
顺带提一句,你ES召回差可能不全是向量库的问题,bge-m3的向量维度和距离算法你有没有调过?ES的HNSW参数默认值其实挺保守的,先试试调efConstruction和efSearch,说不定还能抢救一下。
80万条真不用纠结,Qdrant单机够扛,等真到亿级再迁Milvus也不迟。
过滤+向量混合检索这俩我都压过,Qdrant的payload索引延迟反而更稳,Milvus功能多但调优坑不少。
80万向量真不算大,我生产上Qdrant跑到过5亿,只要把payload索引建好,过滤加向量检索基本都在几十毫秒内,扛得住。Milvus那套分布式架构确实重,但如果你后面要上亿级且需要复杂标量过滤,它的优势才体现出来,否则就是杀鸡用牛刀。K8s这个阶段真没必要,单机Qdrant加个SSD就挺稳,等真遇到瓶颈再迁也不迟。另外ES召回差可能是混合检索没调好,别急着全盘否定,但专用库确实省心。