Milvus - 云原生高性能向量数据库
milvus-io/milvus
为 AI 应用打造的分布式向量数据库,支持十亿级向量实时检索,适配 RAG/图像搜索等场景
成熟度:维护活跃,最近提交0天前,open issues 1109个,大型项目持续迭代中
项目体检
部署 · Docker Compose 多服务编排(需 etcd/MinIO/Pulsar/Azurite 等依赖),分布式模式需 K8s,单机版可直接 docker run,默认端口 19530
成本 · 需外部存储(MinIO/S3/Azure Blob)、消息队列(Pulsar/Kafka)、元数据存储(etcd),Lite 版开箱即用仅需本地文件,GPU 加速可选
技术 · Go + C++(核心向量引擎),集成 FAISS/HNSW/DiskANN 等索引算法,支持 CPU/GPU 硬件加速,K8s 原生架构
许可 · Apache-2.0 协议,允许商用且无需开源衍生代码,企业友好
活跃 · 最新版本 v2.6.20(9天前),364 位贡献者,最近提交0天前,高频迭代中
解决什么
Milvus 专为 AI 时代的向量检索场景设计。当你需要在数亿条文本嵌入、图像特征或多模态数据中快速找到最相似的 Top-K 结果时(如 RAG 知识库召回、以图搜图、推荐系统),传统关系数据库的全表扫描会崩溃。Milvus 通过专用的向量索引算法(HNSW/IVF/DiskANN)和分布式架构,将检索延迟压缩到毫秒级,同时支持实时数据更新和元数据混合过滤,让大模型应用能高效管理海量非结构化数据的向量化表示。
为何火
在 HN 早期讨论中,开发者对其"在线学习"能力(无需离线训练即可插入新向量)和分布式扩展性表示认可。相比 FAISS 只是算法库,Milvus 提供了完整的数据库能力:持久化存储、CRUD 接口、高可用容灾。项目 4.5 万 star 背后是 LF AI 基金会背书和 Zilliz 商业公司的持续投入,已在金融风控、电商推荐、生物制药等领域落地。2024 年随着 RAG 架构爆火,Milvus 成为 LangChain/LlamaIndex 等框架的首选向量存储后端,社区活跃度激增。
核心功能
- 多索引支持: 内置 HNSW(高精度)、IVF(平衡型)、DiskANN(超大规模)、FLAT(精确检索)等 10+ 种索引,可根据数据规模和精度要求灵活选择
- 混合检索: 支持向量相似度 + 标量字段过滤(如
age > 18 AND category='电子产品'),以及稀疏/稠密向量混合检索 - 存算分离架构: Query Node 负责查询,Data Node 负责写入,Coordinator 管理元数据,可独立扩缩容应对读写不均衡
- 硬件加速: CPU 侧集成 AVX512/NEON 指令优化,GPU 侧支持 NVIDIA RAPIDS 加速,IVF_SQ8H 索引在 GPU 上性能提升 10 倍
- 实时更新: 基于 Pulsar/Kafka 的流式架构,插入的向量秒级可查,无需像 ANNOY 那样重建索引
- 多租户隔离: 支持 Collection/Partition 分区管理,配合副本机制实现资源隔离和故障容错
安装
快速体验(Milvus Lite):
pip install pymilvus[milvus-lite]
# Python 代码中直接用本地文件
client = MilvusClient("demo.db")
单机部署(Docker):
docker run -d --name milvus \
-p 19530:19530 -p 9091:9091 \
-v milvus_data:/var/lib/milvus \
milvusdb/milvus:latest
生产集群(K8s + Helm):
helm repo add milvus https://zilliz-helm.s3.us-west-2.amazonaws.com/charts
helm install milvus milvus/milvus --set cluster.enabled=true
中文用户注意:官方 Helm Chart 默认拉取海外镜像,建议配置国内镜像源或提前 pull 到私有仓库。
适合谁
- AI 应用开发者: 构建 RAG 知识库、智能客服、文档问答系统,需要快速集成向量检索能力
- 数据科学团队: 处理亿级图像特征库、用户行为嵌入,需要兼顾查询性能和成本控制
- 企业架构师: 寻求 Pinecone/Weaviate 的私有化替代,要求数据主权和可定制性
- 不适合: 数据量小于百万且无增长预期(SQLite + pgvector 更简单);纯关键词搜索场景(Elasticsearch 更合适)
社区评价
HN 早期讨论(152 点赞)显示开发者对其工程化能力认可。正面观点集中在:① 相比 FAISS 提供完整数据库能力,无需自己处理持久化和并发;② 支持在线插入向量,解决了 ANNOY 需要定期重建索引的痛点;③ 提供详细的 Benchmark 工具和测试报告,透明度高。
争议点主要在:① 早期版本(v0.6)被质疑为何不默认使用量化压缩(官方回应称 SQ8 已提供 8 倍压缩);② 有用户指出 ann-benchmarks 的数据集维度相关性高,实际 DNN 特征可能表现不同;③ 索引构建速度和内存占用在十亿级数据下仍是挑战,需要多台服务器。
总体社区认为 Milvus 是生产级向量数据库的可靠选择,尤其适合已有 K8s 基础设施的团队。
选型对比
vs Pinecone(商业向量数据库):
- Milvus 优势:开源可自部署,无供应商锁定,支持私有云;硬件加速更灵活(CPU/GPU 可选)
- Pinecone 优势:全托管零运维,按量付费适合初创团队;冷启动更快(无需配置依赖)
- 取舍:数据敏感或成本敏感选 Milvus,追求极简运维选 Pinecone
vs Weaviate(开源向量数据库):
- Milvus 优势:性能更强(Go+C++ vs 纯 Go),支持更多索引类型,分布式架构更成熟
- Weaviate 优势:内置向量化模块(可直接输入文本自动编码),GraphQL 接口更友好
- 取舍:超大规模(十亿级)选 Milvus,中小规模且需要端到端方案选 Weaviate
vs pgvector(PostgreSQL 插件):
- Milvus 优势:专用索引算法性能碾压,水平扩展能力强
- pgvector 优势:复用现有 PG 生态,事务支持完整,运维成本低
- 取舍:向量数据超千万或查询 QPS > 1000 必选 Milvus,否则 pgvector 够用
已知坑
- 依赖复杂: 分布式模式需要 etcd(元数据)、MinIO/S3(对象存储)、Pulsar/Kafka(消息队列),初次部署容易遗漏配置导致启动失败。建议先用 Lite 版验证业务逻辑,再迁移到集群
- 内存杀手: HNSW 索引会将全量向量加载到内存,百万条 768 维向量需要约 3GB RAM。生产环境建议用 DiskANN 或 IVF_SQ8 量化索引
- 索引构建慢: 十亿级数据首次建索引可能耗时数小时,且期间无法查询。官方建议分批导入或使用增量索引(Streaming Index)
- 中文文档滞后: 部分高级特性(如 GPU 索引、混合检索)的中文文档更新不及时,需参考英文官方文档
- 版本兼容性: 2.x 到 3.x 有 breaking changes,升级需谨慎测试。社区反馈 1109 个 open issues 中部分涉及边界 case 的 bug
来源: GitHub 仓库 + HN 社区讨论(2019 年首次发布时的评论)
安装方式:pip install pymilvus 或 docker compose