最近社区里关于Milvus、Qdrant、Chroma的对比讨论很多,我也花了两周时间在三个库上分别跑了RAG+多模态检索的混合负载。先说结论:纯看基准测试,Qdrant的单机QPS确实能打,但一旦涉及复杂过滤(比如时间+标签+向量联合查询),Milvus的索引下推优势明显,而Chroma在快速原型阶段简直不要太爽。
技术层面,我特别关注了Qdrant的HNSW实现——它的边修剪策略比Milvus更激进,导致内存占用低但召回率波动大。而Milvus的Knowhere 2.x在GPU加速和量化压缩上确实下了功夫,但部署时那个etcd+minIO的依赖链让人头疼。Chroma则完全放弃了分布式,用sqlite硬扛,适合开发者个人玩具但千万别上生产。
个人经验:如果你的核心场景是单机低延迟且数据量小于100万,Qdrant的filtered search性能碾压;如果必须上云且需要动态schema,Milvus的collection设计更灵活。但最让我意外的是Chroma的embedding函数集成——直接对接OpenAI和HuggingFace的API,写demo只用10行代码。
抛两个问题:1)大家在实际业务中,向量数据库的冷热数据分离怎么做的?2)有谁在生产环境里用过Chroma的分布式扩展(比如Chroma Cloud)?欢迎分享踩坑经验。
行业趋势上,我认为向量数据库会像当年的OLAP引擎一样分化:专用场景(如推荐系统)被Milvus/Qdrant吃掉,而通用场景会被数据库内置的向量插件(如pgvector)逐步替代。选型时别只看跑分,先想清楚你的查询模式是纯向量搜索还是混合过滤。