Milvus 向量数据库提供三种部署方案,覆盖从轻量级本地嵌入到单机服务器、再到云原生集群等不同应用场景与数据规模。值得关注的是,所有部署模式的客户端 API 完全一致,因此在不同环境间迁移数据与应用非常顺畅。

先建立一个直观认知:如果只需要在笔记本上运行演示或资源受限,选择 Milvus Lite 即可;若希望在单机服务器承载生产负载且不打算使用 Kubernetes,则 Milvus Standalone 是可靠方案;一旦数据量达到亿级或需要高可用与弹性伸缩能力,Distributed 版本才是最佳选择。接下来详细分析。
1. 部署模式快速了解
Milvus Lite
Milvus Lite 本质上是 Python 库,可像导入普通包一样轻松集成到现有应用中。它特别适合在 Jupyter 笔记本、智能设备或其他资源受限环境中进行测试与开发。安装非常简便:执行 pip install pymilvus,随后通过 MilvusClient("./demo.db") 即可创建一个基于本地文件存储的向量数据库,所有数据会自动持久化。
Milvus 单机版
Milvus Standalone 采用单机服务器部署模式,所有组件整合在单个 Docker 镜像中,启动快捷方便。对于承担生产负载但不愿运维 Kubernetes 的团队,只要单机内存充足,这是一个理想选择。此外,Standalone 通过主从复制实现高可用,兼顾了成本与可靠性。
分布式 Milvus
Milvus Distributed 部署在 Kubernetes 集群中,采用云原生架构。写入和查询由独立节点分别处理,关键组件可冗余部署,具备出色的可扩展性与高可用性,并且每个组件的资源分配均可灵活调整。对于需要执行大规模向量搜索的企业用户而言,这是首选架构。
2. 如何选择适合的 Milvus 部署模式
选择哪种部署方式,主要取决于两个因素:项目当前所处的阶段以及数据集规模的大小。
项目阶段
根据应用开发的不同阶段来抉择:
1. 快速原型开发
当需要快速构建原型或学习时(例如搭建 RAG 演示、AI 聊天机器人或多模态搜索应用),Milvus Lite 已足够使用,也可将 Lite 与 Standalone 组合。在笔记本上用 Lite 快速迭代,尝试不同的分块策略;当需要小规模生产部署、服务真实用户,或验证超过几百万向量的方案时,则切换到 Standalone。所有 Milvus 部署的客户端 API 保持一致,Lite 中的代码逻辑可直接复用。数据迁移同样便捷——通过命令行工具即可将 Lite 的数据迁移至 Standalone。
2. 小规模生产部署
在早期生产阶段,项目仍在探索产品市场契合度,此时敏捷性比可扩展性更为关键。Milvus Standalone 是最优选择。只要机器资源充足,它可以扩展到 1 亿向量,且对 DevOps 的要求远低于维护 K8s 集群。
3. 大规模生产部署
当业务快速增长,数据量超出单机容量时,应考虑采用分布式 Milvus。可以继续使用 Standalone 作为开发或预发布环境,同时运行基于 K8s 的分布式集群处理生产负载。该方案能够支撑数百亿向量,并且能够根据具体工作负载(如高读取低写入或高写入低读取)灵活调整节点配置。
4. 边缘设备上的本地搜索
对于涉及隐私或敏感信息的场景(例如在边缘设备上执行私有文档搜索或对象检测),可直接在设备上部署 Milvus Lite,无需依赖云服务。这样数据始终保留在本地,安全性与隐私保护更强。
项目数据集规模
数据集规模也是直观的决策依据:
- Milvus Lite 适用于几百万向量以内的小规模数据集。
- Milvus Standalone 面向中型规模,可扩展至 1 亿向量。
- Milvus Distributed 专为大规模场景设计,能够处理从一亿到数百亿向量的数据集。
3. 三种部署模式功能对比
在支持的数据类型和搜索功能方面,三种部署模式完全一致。差异主要体现在客户端支持、数据管理能力和一致性级别上:Lite 版本较为简洁,而 Standalone 和 Distributed 则提供更全面的功能。
| 功能 | Milvus Lite | Milvus 单机版 | 分布式 Milvus |
|---|---|---|---|
| SDK / 客户端软件 | Python gRPC |
Python Go Java Node.js C# RESTful |
Python Java Go Node.js C# RESTful |
| 数据类型 | 密集向量 稀疏向量 二进制向量 布尔值 整数 浮点 VarChar 数组 JSON |
密集向量 稀疏向量 二进制向量 布尔值 整数 浮点 VarChar 数组 JSON |
密集向量 稀疏向量 二进制向量 布尔值 整数 浮点 VarChar 数组 JSON |
| 搜索功能 | 向量搜索(ANN 搜索) 元数据过滤 范围搜索 标量查询 通过主键获取实体 混合搜索 |
向量搜索(ANN 搜索) 元数据过滤 范围搜索 标量查询 通过主键获取实体 混合搜索 |
向量搜索(ANN 搜索) 元数据过滤 范围搜索 标量查询 通过主键获取实体 混合搜索 |
| CRUD 操作符 | ✔️ | ✔️ | ✔️ |
| 高级数据管理 | 不适用 | 访问控制 分区 分区密钥 |
访问控制 分区 分区密钥 物理资源分组 |
| 一致性级别 | 强 | 强 有界稳定性 会话 最终(Eventual) |
强 有界稳定性 会话 最终(Eventual) |
