最近在做RAG落地,数据量不大(几十万条文本切片),但要求响应快一点。看了好多帖子,越看越迷糊。Milvus功能全但部署重,Chroma轻量但听说大并发不行,还有Qdrant和Weaviate也在观望。我现在是单机版先用起来,文档说Milvus Lite也能跑,但不知道后面换正式环境迁移麻不麻烦。有没有实际项目用过的大佬讲讲,小团队从零开始选哪种更省心?主要怕选错了后面重构想哭。另外,如果只是存embeddings做相似度检索,是不是直接用pgvector就够了?顺便想问问大家,做RAG的时候是直接存原文片段还是把结构化信息也一起存进去?结构化信息存哪里比较好?求真实经验,别推官方文档那种。
向量数据库到底怎么选?Milvus和Chroma把我整不会了
全部回复
共 6 条说实话你这个问题我太有共鸣了,当初我也在Milvus和Chroma之间卡了一星期。要是预算和运维人手都紧,我劝你别一上来就上Milvus集群,单机用Milvus Lite或者干脆先上Qdrant的docker版,后面真要扩了再迁也不至于推倒重来。pgvector我倒是真试过,几十万条数据加HNSW索引其实响应挺稳的,如果你们团队本来就用Postgres,那真没必要为了这点量多养一个组件。关于存原文还是结构化信息,我的做法是原文切块存对象存储或者pg里,embedding放向量库,然后结构化元数据(比如时间、来源、文档类型)用单独的字段存,做过滤时效率高很多。最怕的是把啥都塞进向量库里,过滤逻辑一复杂就等着哭吧。你现在单机跑通了,后面无非是加个索引或者换引擎,接口层抽象好就行,别太纠结选型。
几十万切片用pgvector其实真够,省一套中间件运维,后面量大了再迁也来得及。Milvus Lite到正式版迁移不算麻烦,schema和collection对齐就行,主要是索引参数得重调。结构化信息我一般拆两处存,过滤字段放向量库做标量过滤,原始JSON丢PG或ES方便回查。小团队先跑通链路比选型更重要,别在选型上耗太久。
几十万切片我们直接上的pgvector,单机跑得很稳,检索延迟十几毫秒,真没必要一上来就扛Milvus。Milvus Lite迁移到集群版不算太痛,但schema和索引参数得重调,小团队折腾这个有点浪费。结构化信息我一般单独塞Postgres,向量库只存id和原文,检索回来再join,省得后面改字段想死。
几十万切片真没必要上Milvus,pgvector完全够用,省一套运维。后面量涨了再迁Qdrant也不难,接口比Milvus友好。结构化信息建议单独存PG,检索时用id关联,别硬塞进向量库。Chroma我拿来做原型挺爽,但生产环境并发一上来确实会卡。
几十万切片真不算大,pgvector 其实完全够用,尤其是你们已经用 Postgres 的话,省一个组件省一堆运维破事。我去年一个项目就是从 Chroma 起步的,本地开发确实爽,但一上并发就开始各种锁和内存问题,后来迁到 Qdrant 才稳下来,Milvus Lite 到正式版迁移我倒没试过,不过 Milvus 那套 collection/schema 概念挺重的,小团队维护成本不低。结构化信息我建议别硬塞进向量库,payload 里放个 id 就行,原文和 metadata 老老实实放 Postgres 或者 Mongo,检索回来再 join,这样过滤、更新、删数据都清爽得多。RAG 里最常见坑就是 metadata 和向量混在一起,后面想改个字段要重建整个 collection,那才叫想哭。你们要是单机先跑,Qdrant 单机 docker 起一个也很轻,API 比 Chroma 规范,后面上集群路径也顺。真别一上来就 Milvus,除非你确定数据量要上千万甚至亿级。
几十万切片pgvector就够了,别折腾Milvus。结构化信息我一般塞metadata字段,检索时一起带出来。