从查询吞吐量、内存占用、过滤能力等维度对比四大自托管向量数据库,提供生产级 Docker Compose 部署配置和选型建议。
当你的向量集合扩展到数百万条数据时,Pinecone 和 Weaviate Cloud 这类托管向量数据库的收费足以让人瞠目结舌。对于那些部署本地 LLM、检索增强生成(RAG)和语义搜索的创业团队和工程团队来说,自托管向量数据库可以消除供应商锁定,并将每月基础设施成本从数百美元削减到 10–20 美元/月的 VPS。
在这篇深度解析中,我们将对比 2026 年最受欢迎的 4 款自托管向量数据库——Qdrant、pgvector(PostgreSQL)、Milvus 和 Chroma——在查询吞吐量、内存占用、过滤能力等方面进行基准测试,并提供可用于生产环境的 Docker Compose 部署方案。
Qdrant 采用 Rust 编写,是我们 2026 年独立向量搜索的首推方案。它具备原生 payload 过滤能力(在向量搜索时直接结合元数据布尔过滤器,而非事后过滤)、极高的并发性能,以及原生标量/产品量化功能,可将内存消耗降低高达 80%,而召回率几乎不下降。
零 GC 停顿:Rust 运行时确保在重并发下有确定性的亚 10ms 查询延迟。
Payload 索引:可对元数据字段(如 tenant_id、created_at、status)建立索引,使带复杂过滤条件的查询零延迟 penalty。
内置 Web 仪表盘:自带开箱即用的 Web UI,位于 6333/dashboard 端口,可用于探索集合和运行测试向量查询。
生产级 Docker Compose 部署方案:
version: '3.8'
services:
qdrant:
image: qdrant/qdrant:v1.11.0
container_name: qdrant_engine
restart: unless-stopped
ports:
- "127.0.0.1:6333:6333" # HTTP REST API & Web Dashboard
- "127.0.0.1:6334:6334" # gRPC API (Fastest for Python/Go)
environment:
- QDRANT__SERVICE__API_KEY=${QDRANT_API_KEY:-super_secret_api_key_here}
- QDRANT__STORAGE__PERFORMANCE__MAX_SEARCH_THREADS=4
volumes:
- qdrant_data:/qdrant/storage
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:6333/readyz"]
interval: 15s
timeout: 5s
retries: 3
volumes:
qdrant_data:
driver: local
如果你的应用已经依赖 PostgreSQL(通过 Supabase、RDS 或自托管 Postgres 16+),那么引入 pgvector 通常是最简洁的架构选择。你可以在单一数据库容器中同时获得 ACID 事务、关系型外键、标准 SQL 查询和向量相似度搜索。
单一数据源:应用数据库和独立向量引擎之间无需数据同步或双写。
HNSW 索引支持:pgvector 0.7+ 版本起,Postgres 同时支持快速 HNSW 图索引和节省内存的 halfvec(16 位浮点)索引。
关系型 Join:直接用标准 SQL 将相似度查询与用户表、权限表和租户 schema 进行 Join:
SELECT documents.id, documents.title, 1 - (embedding <=> '[0.012, 0.045, ...]') AS similarity
FROM documents
WHERE documents.tenant_id = 'acme_corp'
ORDER BY embedding <=> '[0.012, 0.045, ...]'
LIMIT 5;
PostgreSQL 16 + pgvector 生产级 Compose 配置:
services:
postgres:
image: pgvector/pgvector:pg16
container_name: postgres_vector
restart: unless-stopped
environment:
POSTGRES_DB: app_db
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-secure_db_password}
ports:
- "127.0.0.1:5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
command: >
postgres
-c shared_buffers=1GB
-c work_mem=64MB
-c maintenance_work_mem=512MB
-c max_parallel_workers=4
volumes:
pgdata:
Milvus 专为大规模分布式部署而设计。如果你的向量集合超过 1000 万条 embedding,且需要多节点集群或 DiskANN 存储(直接在 NVMe SSD 上查询向量以降低内存需求),Milvus Standalone 是一个令人印象深刻的引擎。
然而,对于单机爱好者或小型创业团队的部署栈来说,Milvus 由于依赖 etcd 和 MinIO 对象存储, footprint 较重。
Chroma 已成为 LangChain 和 LlamaIndex 教程中的默认向量数据库。凭借其轻量级服务器容器和原生 Python 客户端集成,Chroma 在快速原型开发和本地开发场景中无可匹敌。
对于拥有数百万向量的多租户 SaaS 场景,Qdrant 或 pgvector 提供了更好的并发和内存管理能力,但 Chroma 在轻量级内部 Agent 和个人自动化场景中仍然表现出色。
向量 embedding 相比传统表格数据需要更多内存,因为 HNSW 图必须驻留在内存中才能实现快速的最近邻遍历。
以下是用 OpenAI text-embedding-3-small / 1536 维向量做 1,000,000 条向量的硬件配置经验法则:
推荐 VPS:每月 €6 的 Hetzner CX32(4 vCPU, 8 GB RAM)或每月 $12 的 DigitalOcean Droplet,可以轻松处理超过 150 万条向量,响应时间低于 15ms。
想要组装一套完整的生产级自托管技术栈(Vector DB + Ollama + Open WebUI + Postgres + Traefik)?
👉 在 SelfHostStack 上探索交互式架构栈、硬件计算器和预置的 Docker Compose 模板。