项目初期我毫不犹豫选了 Milvus:专业、性能强、生态活跃。但服务跑起来后才发现,对我们这种单机十万级向量、QPS 个位数的场景,独立部署的 Milvus 是用航母钓鱼。
换型的三个理由
- 运维成本:少一个独立组件,备份、监控、告警全部复用 PostgreSQL 现有体系。
- 数据一致性:文档元数据和向量在同库同事务,删除重建不再需要双写对账。
- 规模适配:pgvector HNSW 索引在十万级向量上召回率与延迟完全满足需求,P95 约 8ms。
1CREATE EXTENSION IF NOT EXISTS vector;23CREATE TABLE doc_embedding (4 id BIGSERIAL PRIMARY KEY,5 doc_id BIGINT NOT NULL REFERENCES document(id) ON DELETE CASCADE,6 chunk_text TEXT NOT NULL,7 embedding VECTOR(1024) NOT NULL8);910CREATE INDEX ON doc_embedding11 USING hnsw (embedding VECTOR_COSINE_OPS) WITH (m = 16, ef_construction = 64);当然这个选择有明确边界:当向量规模过千万、需要多副本水平扩展时,专用的向量数据库仍然是正解。选型的本质不是比参数,而是认清自己的规模和团队的运维能力。