Milvus 和 pgvector 对比:数据持续增长时该怎么选
pgvector 把向量检索加入 Postgres,可复用关系数据、事务和 JOIN;扩容方式包括纵向扩展、只读副本和额外的分片方案。Milvus 是专门的向量数据库,将持久数据放在对象存储,并分别扩缩写入、索引与检索资源。选择取决于是否需要关系能力,以及实际过滤、吞吐、延迟和运维要求。
- Apache-2.0,GitHub 40K+ star
- 可扩展到数百亿向量
- 存储与计算分离
- 单字段最高 32,768 维,17 种稠密向量索引
- Salesforce
- Walmart
- NVIDIA
- eBay
- IBM
- Cisco
- Roblox
- Exa.ai
- OpenEvidence
- Read.ai
- Plaud
- Filevine
Milvus 和 pgvector 扩展性对比:向量表超过一台 Postgres 之后怎么办?
Milvus 是存算分离架构。segment 和 WAL 都在对象存储里,新加的 query 节点直接加载分配给它的 segment,不用从别的节点拷盘;写入、检索、建索引分别由不同类型的节点承担,各自扩缩。tiered storage 还能让单个节点服务超过自身内存和磁盘的数据量。
pgvector 的扩展性就是 Postgres 的扩展性。README 写明:纵向扩展靠给单实例加内存、CPU 和磁盘;横向扩展靠只读副本,或者用 Citus、PgDog 这类分片方案。Postgres 副本只读,所有写入和 HNSW 建索引都落在主库;一旦图结构超出 maintenance_work_mem,HNSW 建索引会明显变慢。
| 能力 | Milvus | pgvector |
|---|---|---|
| 架构 | 存算分离:proxy、streaming、query、data 节点 | Postgres 进程内的扩展;堆表加 HNSW 或 IVFFlat 索引 |
| 数据存放 | 对象存储(S3、MinIO、Azure Blob、GCS),WAL 也在其中 | 主库本地磁盘,WAL 流式同步到副本 |
| 写入与建索引扩展 | 增加 streaming 或 data 节点 | 单主库;只能靠本机并行 worker |
| 查询扩展 | 增加 query 节点和副本,segment 从对象存储加载 | 只读 hot standby 副本,每个都是全量拷贝 |
| 数据超过单节点容量 | tiered storage 按需拉取字段数据 | 换更大的机器,或用 Citus / PgDog 分片 |
| 建索引内存 | 在 data 节点上构建,与查询服务分离 | HNSW 图放得进 maintenance_work_mem 才快 |
| 可建索引的维度 | 单个向量字段最高 32,768 维 | vector 最高 2,000 维;halfvec 4,000;bit 64,000 |
| 大规模多租户 | partition key 支持百万级租户;也可按 database、collection、partition 隔离 | 按租户做 list 分区或拆表 |
Milvus 和 pgvector 性能对比:谁更快?
图中仅展示当前已核对的 Milvus 与 Zilliz Cloud VectorDBBench 配置。这里没有同条件、同版本的对手结果,不能据此推断谁更快。使用相同数据集、过滤比例、召回目标和硬件重测后再比较。
- Zilliz CloudZillizCloud-8cu-perf13,316.23 QPSP99 2 ms · 召回率 0.9383
- MilvusMilvus-16c64g-sq4u-fp16-force_merge9,575.69 QPSP99 2.3 ms · 召回率 0.9189
来源:VectorDBBench,仅列 Milvus 与 Zilliz Cloud 的已核对配置;不构成对竞品的性能结论。
- Zilliz CloudZillizCloud-8cu-perf-partition_key10,020.53 QPSP99 2.6 ms · 召回率 0.9788
- MilvusMilvus-16c64g-sq8-partition_key11,280.08 QPSP99 1.6 ms · 召回率 0.9507
来源:VectorDBBench,仅列 Milvus 与 Zilliz Cloud 的已核对配置;不构成对竞品的性能结论。
Zilliz Cloud 就是全托管的 Milvus:同样的引擎、同一梯队的性能,不用自己规划集群、升级和扩容。
免费试用 Zilliz Cloudpgvector 和 Milvus 功能对比:索引类型、过滤与混合检索
pgvector 给 Postgres 加了两种 ANN 索引,外加 SQL 的全部工具。Milvus 是专门的向量数据库:索引家族更多,标量索引在向量检索之前先过滤,服务端内置 BM25 函数和 ranker 做混合检索。做向量数据库选型时,先看这张向量数据库对比表,pgvector 和 Milvus 区别一目了然。
| 功能 | Milvus | pgvector |
|---|---|---|
| 稠密向量索引类型 | HNSW、IVF(FLAT、SQ8、PQ、RaBitQ)、SCANN、DiskANN、GPU(CAGRA、IVF、暴力检索) | HNSW、IVFFlat |
| 向量类型 | float32、float16、bfloat16、int8、二值、稀疏 | vector、halfvec、bit、sparsevec |
| 量化 | SQ8、PQ、PRQ、RaBitQ;HNSW_SQ、HNSW_PQ、HNSW_PRQ | halfvec 存储;表达式索引做二值量化,再用精确距离重排 |
| 元数据过滤 | 先用标量索引(INVERTED、BITMAP、STL_SORT)或 partition key 过滤,再做 ANN 检索;复杂表达式可用 iterative_filter hint | WHERE 条件在索引扫描之后应用:README 的例子是条件命中 10% 的行时,默认 hnsw.ef_search 为 40 只能平均返回约 4 行;0.8.0+ 的迭代索引扫描会继续扫到凑够 k 行 |
| 全文检索 / BM25 | 内置 BM25 函数,服务端把原始文本转成稀疏向量 | Postgres 全文检索:tsvector、tsquery、ts_rank_cd |
| 混合检索 | 一次 hybrid_search 查多个向量字段,RRFRanker 或 WeightedRanker 融合 | 两条查询分别执行,在 SQL 或应用层用 RRF 或 cross-encoder 合并 |
| 多租户 | database、collection、partition 或 partition key | list 分区或拆表 |
| 事务与 JOIN | collection 级一致性级别;不支持跨表 JOIN | Postgres 自带 ACID 事务、JOIN 和时间点恢复 |
| 部署方式 | Milvus Lite、Standalone、Distributed、Zilliz Cloud | 任意 Postgres 13+;Amazon RDS、Supabase、Neon、Crunchy Bridge 等托管服务 |
| 许可证与社区 | Apache-2.0;Go 和 C++;LF AI & Data 毕业项目;GitHub 40K+ star | PostgreSQL License;C;GitHub 20K+ star |
| SDK 语言 | Python、Java、Go、Node.js、C#、C++、Rust、RESTful | 任何带 Postgres 客户端的语言 |
Milvus 比 pgvector 难部署吗?运维复杂度对比
Milvus Lite 可用 pip 在进程内启动,CPU 是默认路径,GPU 索引可选。已有 Postgres 的团队可以先用 pgvector,迁移时通常能复用模型与维度一致的向量,但仍需映射 schema、创建索引并改写检索调用。两者都应按索引内存、存储、查询量和可用性要求评估成本。
| 阶段 | Milvus | pgvector |
|---|---|---|
| 起步 | pip install pymilvus 即进程内运行 Milvus Lite,数百万向量以内 | 在现有 Postgres 13+ 上 CREATE EXTENSION vector |
| 单机 | Standalone:使用 Docker 部署,并配置 etcd 与对象存储;Woodpecker 可嵌入运行 | 单主库;HNSW 图放进 maintenance_work_mem 才建得快,默认 2 个并行 worker |
| 集群 | Distributed:Kubernetes 上用 Milvus Operator 或 Helm 部署,数据在对象存储;1 亿到数百亿 | 只读副本;分片靠 Citus 或 PgDog |
| 调参入口 | 按字段设索引参数(M、efConstruction、nlist),按查询设搜索参数 | 默认 m 16、ef_construction 64、hnsw.ef_search 40;hnsw.iterative_scan、hnsw.max_scan_tuples |
| GPU | 可选 GPU_CAGRA、GPU_IVF 索引 | 无 |
| 框架与 SDK | langchain-milvus、LlamaIndex、Haystack、Dify、n8n;SDK 覆盖 Python、Java、Go、Node.js、C#、C++、Rust | langchain-postgres(PGVector);任意 ORM 或 Postgres 驱动 |
| 托管服务 | Zilliz Cloud,MilvusClient API 一致 | Amazon RDS、Supabase、Neon、Crunchy Bridge |
| 以后迁移 | VTS(Vector Transport Service)有 Postgres Vector 源端(pg_to_milvus):向量和列直接拷贝,不用重新生成向量 | 关系表留在 Postgres,按主键关联 |
pgvector 和 Milvus 哪个好?什么情况下该选 pgvector
pgvector 的优势是复用已有 Postgres 的事务、JOIN 与运维体系。是否需要迁移,应按向量索引、过滤负载和读写扩展的实测结果判断;扩展路径也包括只读副本及 Citus、PgDog 等分片方案。
- 数据本来就在 Postgres 里,向量表一个主库装得下。
- 需要向量和关系行之间的 ACID 事务或 JOIN。
- Agent 记忆或 checkpoint 这类要事务更新的数据;大语料检索交给 Milvus,两者并用。
- 已经在用 RDS、Supabase、Neon 等托管 Postgres,不想多运维一个服务。
- 团队以 SQL 为主,只想要一个连接串,不想引入新的客户端库。
哪些 AI 公司和大型企业在生产环境用 Milvus?
从 AI 原生公司到大型企业,都在生产环境运行 Milvus 或 Zilliz Cloud(托管 Milvus)。milvus.io 用户墙上有 Salesforce、Walmart、NVIDIA、eBay、IBM、Cisco、Roblox、Reddit,也有 Exa.ai、OpenEvidence、Read.ai、Notta.ai、Plaud、Filevine。公开案例中的结果:
- OpenEvidence:基于 Zilliz Cloud,检索延迟低于 10 ms,峰值 4,000 QPS。
- Plaud:每个区域 100 亿+ 向量块,平均召回延迟低于 200 ms。
- Exa:借助混合检索,神经搜索延迟从秒级降到 200 ms 以内。
- Airtable:在 Kubernetes 上用 Milvus Operator 自建 Milvus,支撑语义检索。
延伸阅读
- What determines vector-database scalability?
- How do sharding and replication differ in a vector database?
- How do metadata filters interact with vector search?
- What is HNSW, and how should you tune it?
- How do you choose a vector index for your workload?
- What is hybrid search, and when should you use it?
- How should you design multi-tenancy for vector search?
- How should you benchmark vector search performance?
常见问题
Milvus 和 pgvector 谁更快?
图中仅展示当前已核对的 Milvus 与 Zilliz Cloud VectorDBBench 配置。这里没有同条件、同版本的对手结果,不能据此推断谁更快。使用相同数据集、过滤比例、召回目标和硬件重测后再比较。
pgvector 支持多少条向量?
README 没有给条数上限,容量就是主库的容量:HNSW 图放进 maintenance_work_mem 才建得快,每个副本都是全量拷贝,超过一台机器要靠 Citus 或 PgDog 分片。Milvus Standalone 文档标称约 1 亿向量,Distributed 到数百亿。
pgvector 支持混合检索吗?
支持:向量查询配合 Postgres 全文检索(tsvector),再在 SQL 或应用层用 RRF 合并两份结果。Milvus 的 BM25 函数在服务端运行,一次 hybrid_search 就能用 RRF 或加权 ranker 融合稠密和稀疏结果。
pgvector 支持多少维度?
pgvector 的 vector 类型最多存 16,000 维,但 HNSW 和 IVFFlat 只能给 2,000 维以内的 vector 建索引;halfvec 可索引到 4,000 维,bit 到 64,000 维。Milvus 单个向量字段最高 32,768 维,可直接建索引。
什么情况下该选 pgvector?
向量和需要事务更新、JOIN 的关系行放在一起,且表一台 Postgres 实例装得下时,选 pgvector;规模、过滤检索性能或租户数成为瓶颈时,选 Milvus。PGSQL 和 Milvus 也可以并存:业务数据留在 Postgres,向量检索交给 Milvus。
什么时候该从 pgvector 迁移到 Milvus?
HNSW 建索引超出 maintenance_work_mem、读扩展只能靠全量副本、或租户数和过滤吞吐成为瓶颈时。迁移是拷贝:VTS 的 Postgres Vector 源端(pg_to_milvus)原样搬向量和列,不用重新生成向量;列映射成标量或 JSON 字段,建好索引后双写切流。
不想自己运维集群?
Zilliz Cloud 是 Milvus 原班团队提供的全托管服务,MilvusClient API 与本地一致。可以先用开源 Milvus 起步,再迁到托管服务,应用代码不用重写。
资料来源与技术文档 (43)
- https://milvus.io
- https://github.com/milvus-io/milvus
- https://milvus.io/docs/architecture_overview.md
- https://milvus.io/docs/install-overview.md
- https://milvus.io/docs/scaleout.md
- https://milvus.io/docs/tiered-storage-overview.md
- https://milvus.io/docs/index-explained.md
- https://milvus.io/docs/limitations.md
- https://milvus.io/docs/schema.md
- https://milvus.io/docs/filtered-search.md
- https://milvus.io/docs/use-partition-key.md
- https://milvus.io/docs/full-text-search.md
- https://milvus.io/docs/multi-vector-search.md
- https://milvus.io/docs/reranking.md
- https://milvus.io/docs/multi_tenancy.md
- https://github.com/pgvector/pgvector
- https://github.com/pgvector/pgvector/blob/master/LICENSE
- https://github.com/pgvector/pgvector/issues/54
- https://www.postgresql.org/docs/current/high-availability.html
- https://zilliz.com/vdbbench-leaderboard
- https://github.com/zilliztech/VectorDBBench
- https://github.com/zilliztech/VectorDBBench/blob/main/vectordb_bench/results/leaderboard_v2.json
- https://github.com/zilliztech/VectorDBBench/blob/main/vectordb_bench/results/leaderboard.json
- https://github.com/zilliztech/VectorDBBench/blob/main/vectordb_bench/results/PgVector/result_20230727_standard_pgvector.json
- https://github.com/zilliztech/VectorDBBench/tree/main/vectordb_bench/backend/clients/pgvector
- https://zilliz.com/customers/filevine
- https://zilliz.com/customers/openevidence
- https://zilliz.com/customers/exa
- https://zilliz.com/customers/airtable
- https://zilliz.com/customers/plaud
- https://zilliz.com/customers/read-ai
- https://zilliz.com/customers/meituan
- https://milvus.io/docs/zh/quickstart.md
- https://cloud.zilliz.com.cn/signup
- https://github.com/pgvector/pgvector/blob/master/CHANGELOG.md
- https://docs.langchain.com/oss/python/integrations/vectorstores/pgvector
- https://docs.langchain.com/oss/python/integrations/vectorstores/milvus
- https://milvus.io/docs/integrations_overview.md
- https://milvus.io/docs/install_standalone-docker.md
- https://milvus.io/docs/gpu_index.md
- https://github.com/zilliztech/vts
- https://github.com/zilliztech/VectorDBBench/tree/main/vectordb_bench/backend/clients
- https://lfaidata.foundation/projects/