Milvus 2.6 与 3.0:Go 与 C++ 编写的云原生向量数据库,索引与架构的取舍
Milvus 是一个云原生向量数据库,用 Go 和 C++ 编写,可在数十亿向量上进行可扩展的近似最近邻搜索,支持 CPU/GPU 加速与实时流式更新。
秒懂
- 它是什么?
- Milvus 是 Go 与 C++ 编写的分布式向量数据库,主打 K8s 原生架构与多种索引支持。本文从 v2.6.23 与 v3.0.0 的发布节奏出发,拆解其计算存储分离的设计、索引选择、部署方式,并指出它在轻量场景下的适用边界。
- 适合谁用?
- Milvus 适合需要水平扩展、实时写入、并且已经具备 K8s 运维能力的团队。对于单机原型或快速验证,Milvus Lite 或 pymilvus 的本地文件模式更轻。
- 能商用吗?
- 可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
- 还在维护吗?
- 在维护。仓库在最近一天内有新的提交。
- 用什么语言写的?
- 主要是 Go(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。
开源项目深度解析
它解决什么问题:向量检索从实验到生产
Milvus 是一个用 Go 和 C++ 编写的向量数据库,定位是处理非结构化数据的相似性搜索。你先把文本、图片编码成向量,然后存入 Milvus,之后用查询向量去检索最相似的记录。它不只是存向量,还支持标量字段,比如整数、字符串和 JSON,这样你可以在向量搜索的同时做元数据过滤。它的目标场景是 AI 应用,比如推荐系统、问答机器人、多模态检索。Milvus 的卖点是规模:文档声称可以处理数十亿向量,并且支持水平扩展。它提供两种部署形态:一种是 K8s 上的分布式模式,另一种是单机模式。还有 Milvus Lite,一个轻量版,可以通过 pip 安装,适合快速开始。
核心机制:计算与存储分离的 K8s 架构
Milvus 的架构设计强调计算和存储分离。数据插入和查询分别由 data node 和 query node 处理,这两类节点可以独立扩缩容。读密集时增加 query node,写密集时增加 data node。这种设计让资源分配更灵活。文档提到节点是无状态的微服务,运行在 K8s 上,故障恢复快。它还支持副本,把数据段加载到多个 query node 上,提高吞吐量和容错性。这个架构的代价是运维复杂度。要跑一个分布式集群,你需要管理多个组件,包括协调器。对于小团队,这可能是负担。但如果你已经有 K8s 基础设施,这种设计能带来弹性。
索引与硬件加速:不是只有一个 HNSW
Milvus 把系统核心和向量搜索引擎分开,这使得它可以接入多种索引类型。文档列出的索引包括 HNSW、IVF、FLAT(暴力搜索)、SCANN 和 DiskANN。还有基于量化的变体,比如 IVFPQ。这意味着你可以根据数据规模和内存预算选择索引。例如,DiskANN 适合磁盘上的大规模数据,而 HNSW 通常用于内存中的高召回。Milvus 还支持 mmap,允许将部分数据映射到内存,减少内存占用。此外,它支持 GPU 索引,比如 NVIDIA 的 CAGRA。硬件加速是它的一个亮点,但这也意味着如果你没有 GPU,可能无法利用这些特性。选择索引时,你需要理解每种索引的召回率和延迟权衡,文档提供了指南,但实际调优需要实验。
快速上手:pymilvus 与 Milvus Lite 的实际命令
根据 README,安装 Python SDK 只需一条命令:pip install -U pymilvus。然后可以用 MilvusClient 创建客户端。如果要本地体验,安装 pymilvus[milvus-lite],然后这样实例化客户端:client = MilvusClient("milvus_demo.db")。这会创建一个本地文件持久化的向量数据库。对于连接远程服务器,你需要指定 uri 和 token,例如 client = MilvusClient(uri="<endpoint>", token="<credentials>")。创建集合时,需要指定维度,比如 dimension=768。插入数据用 client.insert,搜索用 client.search,可以设置 limit 参数控制返回数量,还可以用 output_fields 指定返回的字段。这个流程很简单,但要注意,Milvus Lite 只适合单机和小数据量,生产环境需要部署完整版。
混合搜索与过滤:一个被低估的复杂度
Milvus 强调支持元数据过滤和混合搜索。在实际使用中,这意味着你可以在向量检索的同时,用标量字段过滤结果。例如,你可以只搜索某个类别下的向量。文档提到支持标量索引,这有助于加速过滤。但这里有一个隐含的复杂性:过滤条件会与 ANN 搜索交互,可能影响性能和召回。如果过滤条件很严格,可能需要扫描更多候选向量,导致延迟增加。Milvus 提供了范围搜索等高级功能,但你需要理解这些特性的行为。对于只需要纯向量搜索的场景,过滤功能可能不是必需的,但如果你有复杂的业务逻辑,它是有用的。不过,文档没有提供详细的性能数据,所以你需要自己测试。
多租户与存储分层:成本优化的手段
Milvus 支持多租户,隔离级别包括数据库、集合、分区和分区键。这意味着一个集群可以服务多个业务线,同时保持数据隔离。文档声称可以处理从数百到数百万的租户,但具体性能取决于你的资源。另一个成本优化点是热冷数据存储。高频访问的数据放在内存或 SSD 上,低频数据可以放在更便宜的存储上。这有助于降低存储成本,但你需要设计数据生命周期。多租户和存储分层都是生产环境常用的功能,但配置起来不简单。你需要规划分区键的选择,以及数据的冷热分类。如果你只有单一应用,这些功能可能用不上。
版本节奏与替代方案:v2.6 与 v3.0 的并行
仓库显示 v2.6.23 和 v3.0.0 都在近期发布。v2.6.x 是稳定分支,v3.0.0 是主版本更新。这种并行发布意味着新功能可能先在 v3.0 中出现,而 v2.6 继续接收补丁。对于生产环境,你需要决定跟随哪个版本。v3.0.0 发布于 2026 年 7 月,而 v2.6.23 在 8 月,说明 v2.6 仍在维护。替代方案方面,Milvus Lite 本身就是一个轻量替代,适合本地开发。其他向量数据库如 Qdrant 或 Weaviate 也提供类似功能,但 Milvus 的独特之处在于其对 GPU 索引和多种索引类型的支持。如果你不需要分布式,Milvus Lite 可能足够。如果你需要云托管,Zilliz Cloud 是一个选项,但那是商业服务。
维护成本与许可证:Apache-2.0 背后的现实
Milvus 采用 Apache-2.0 许可证,允许商用和修改。但维护成本不低。分布式模式需要管理 K8s 集群,监控多个组件。文档提到支持协调器高可用,但配置起来需要专业知识。升级时,由于版本节奏快,你可能需要频繁迁移。v3.0.0 与 v2.6.x 的 API 可能有差异,升级前必须检查兼容性。Milvus 的社区活跃,但文档中提到的基准测试工具来自 Zilliz,这是商业公司,可能偏向其产品。因此,性能数据需要谨慎看待。对于小团队,维护成本可能超过收益,除非你确实需要水平扩展。
编辑结论
Milvus 适合需要水平扩展、实时写入、并且已经具备 K8s 运维能力的团队。对于单机原型或快速验证,Milvus Lite 或 pymilvus 的本地文件模式更轻。对于严格低延迟的在线检索,先验证 DiskANN 和 mmap 的配置是否符合你的内存预算。在采用前,确认你的查询模式是否需要复杂的元数据过滤,因为过滤与 ANN 的组合会显著影响性能。Milvus 的版本节奏快,v3.0.0 与 v2.6.x 并行发布,升级前必须检查兼容性。最后,Apache-2.0 许可证允许商用,但若依赖 Zilliz Cloud 的托管服务,需评估数据出口与成本。
社区笔记