Milvus 和 pgvector 对比:数据持续增长时该怎么选

pgvector 把向量检索加入 Postgres,可复用关系数据、事务和 JOIN;扩容方式包括纵向扩展、只读副本和额外的分片方案。Milvus 是专门的向量数据库,将持久数据放在对象存储,并分别扩缩写入、索引与检索资源。选择取决于是否需要关系能力,以及实际过滤、吞吐、延迟和运维要求。

  • Apache-2.0,GitHub 40K+ star
  • 可扩展到数百亿向量
  • 存储与计算分离
  • 单字段最高 32,768 维,17 种稠密向量索引
Milvus 各类节点在共享对象存储上独立扩缩;pgvector 运行在一个 Postgres 主库里,只能靠只读副本分担查询。
Milvus 各类节点在共享对象存储上独立扩缩;pgvector 运行在一个 Postgres 主库里,只能靠只读副本分担查询。
Milvus 与 Zilliz Cloud 用户
  • Salesforce
  • Walmart
  • NVIDIA
  • eBay
  • IBM
  • Cisco
  • Roblox
  • Reddit
  • 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 Distributed 支持的向量规模查看来源
32,768Milvus 单个向量字段的最高维度查看来源
40K+milvus-io/milvus GitHub star查看来源
十亿级向量检索的扩展性(依据双方官方文档)
能力Milvuspgvector
架构存算分离: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 配置。这里没有同条件、同版本的对手结果,不能据此推断谁更快。使用相同数据集、过滤比例、召回目标和硬件重测后再比较。

向量检索吞吐(QPS,越高越好)Cohere 1M 数据集,768 维
  • 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 的已核对配置;不构成对竞品的性能结论。

过滤检索吞吐(QPS,过滤后保留 1% 数据)Cohere 1M 数据集,768 维,filter ratio 0.99
  • 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 Cloud

pgvector 和 Milvus 功能对比:索引类型、过滤与混合检索

pgvector 给 Postgres 加了两种 ANN 索引,外加 SQL 的全部工具。Milvus 是专门的向量数据库:索引家族更多,标量索引在向量检索之前先过滤,服务端内置 BM25 函数和 ranker 做混合检索。做向量数据库选型时,先看这张向量数据库对比表,pgvector 和 Milvus 区别一目了然。

功能对比:pgvector HNSW / IVFFlat 与 Milvus 的索引类型、元数据过滤、混合检索、部署方式与 SDK
功能Milvuspgvector
稠密向量索引类型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_PRQhalfvec 存储;表达式索引做二值量化,再用精确距离重排
元数据过滤先用标量索引(INVERTED、BITMAP、STL_SORT)或 partition key 过滤,再做 ANN 检索;复杂表达式可用 iterative_filter hintWHERE 条件在索引扫描之后应用: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 keylist 分区或拆表
事务与 JOINcollection 级一致性级别;不支持跨表 JOINPostgres 自带 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+ starPostgreSQL 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、创建索引并改写检索调用。两者都应按索引内存、存储、查询量和可用性要求评估成本。

PGSQL 和 Milvus 的部署、调参与迁移(依据官方文档)
阶段Milvuspgvector
起步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 索引无
框架与 SDKlangchain-milvus、LlamaIndex、Haystack、Dify、n8n;SDK 覆盖 Python、Java、Go、Node.js、C#、C++、Rustlangchain-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,支撑语义检索。

常见问题

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)