最近在做RAG应用,数据量大概在千万级embedding(768维),用的是bge-large模型。目前本地测试用了Milvus(standalone模式),但插入数据后查询延迟不太稳定,有时候20ms,有时候飙到200ms+。也试了Qdrant的docker版,感觉接口更简单,但社区案例好像没Milvus多。
楼主
14天前
向量数据库选型实战求助:Milvus和Qdrant在千万级数据下怎么选?
请 登录 后发表回复
全部回复
共 42 条
2楼
2天前
千万级768维这个量级,延迟波动大概率不是引擎本身的问题,先看下你Milvus的索引类型和构建参数,HNSW的M和efConstruction调过没?我之前遇到过类似情况,把segment大小和缓存策略调一下能稳定不少。Qdrant上手确实快,但真到生产环境要自己折腾的东西也不少,比如集群部署和压缩算法。另外可以试试把bge-large换成bge-m3,查询速度能快一截,精度掉得也不多。你测试时是纯查询还是带着filter?
3楼
13小时前
巧了,我上个月刚做完一轮类似的压测,也是768维,不过数据量在五百万左右。你那个延迟抖动的问题,我怀疑不一定是向量库本身的问题,Milvus standalone模式下,查询路径里有个叫“knowhere”的索引构建参数,如果min_pts_per_node没调好,在数据分布不均匀时确实会忽快忽慢。Qdrant那边我反而觉得它的HNSW参数暴露得更清楚,而且它默认会用mmap映射文件,冷热数据切换时延迟会更可控一些。但要说社区案例,Milvus确实多,尤其是中文资料,真出问题能搜到的答案多很多。我现在是主力用Qdrant,因为它的过滤查询和payload索引做得太顺手了,RAG场景里如果要做metadata筛选,这个优势会很明显。你千万级数据的话,建议先看看自己的查询是不是都命中了缓存,如果是有规律的重复查询,那200ms的尾部延迟大概率是磁盘IO或者GC造成的,跟选型关系不大。另外提醒一句,bge-large的向量分布比较聚拢,建议把ef构建参数调大一点,不然召回率会有点虚高。