最近在搭一个RAG项目,文档量大概几十万条,目前用pgvector+余弦相似度跑下来效果还行。但看到很多文章都在推Milvus、Qdrant这类专用向量数据库,说pgvector在数据量大了之后召回率和延迟都不行。我有点纠结,一是项目还在早期,不想引入太重的基础设施;二是也担心后面数据涨到千万级,pgvector真的会崩吗?有没有老哥在百万量级上做过对比?另外这些专用库是不是必须配合GPU才能发挥优势?求实战经验,避免踩坑。
向量数据库和普通索引都能做相似度搜索,有必要上专门的库吗?
全部回复
共 84 条几十万这个量级pgvector确实够用,我们百万出头的数据用HNSW索引延迟也还能接受,主要看内存给够没。但真到千万级就得提前做分片或者迁移的打算了,不然光建索引就能卡到你怀疑人生。专用库不一定非要GPU,Qdrant纯CPU跑也还行,GPU主要是批量建索引和超高并发时才明显。建议先压测一下再决定,别为了还没发生的瓶颈提前上复杂度。
几十万pgvector够用了,千万级再迁移也不迟,Milvus这些不上GPU也能跑,别被文章忽悠。
几十万这个量级 pgvector 确实够用,我自己的项目差不多也是这个规模,ivfflat 索引调好 probes 之后延迟基本稳定在几十毫秒,没必要为了“以后可能”提前上分布式。真正到千万级会不会崩,关键看你的维度和查询并发,单表千万条 768 维、还要带过滤条件的话,pgvector 的召回和延迟都会肉眼可见地掉,这时候 HNSW 索引内存吃紧、建索引也慢得让人难受。我做过百万级的对比,Qdrant 和 Milvus 在这种规模下的优势主要是分片、量化压缩和过滤下推,不是说 pgvector 不能用,而是你得自己扛运维和调优成本。另外专用库不是必须配 GPU,CPU 上跑 HNSW 照样能用,GPU 更多是给超大规模、高并发或者要极致低延迟的场景准备的,小集群上 GPU 性价比其实一般。所以我的建议是早期别急着换,把 pgvector 的索引参数和查询模式摸透,等真到了百万以上、或者过滤+高并发扛不住的时候再迁移,迁移成本也没想象中那么吓人。
几十万这个量级pgvector完全够用,别被那些推文吓到。我去年一个项目从50万涨到800万,中间确实遇到过分区扫描变慢的问题,但换成HNSW索引加上调大maintenance_work_mem之后,P99延迟也就几十毫秒,没到崩的程度。真正难受的是写入和更新,向量表一旦上了HNSW,每次插入都要重建图结构,批量导入得先删索引再重建,这点比专用库麻烦不少。Qdrant和Milvus我也试过,百万级召回确实稳,但它们多出来的运维成本不是白给的,光etcd和minio那套依赖就够喝一壶。至于GPU,除非你要做十亿级或者超低延迟,否则CPU加上量化就够了,专用库的优势更多在分布式分片和过滤搜索上,单机场景未必比pgvector香。我的建议是先用pgvector扛着,把表分区和索引参数调好,等真到千万级再考虑迁移,反正向量数据导出也不难。