1 概述
Milvus 是一个高性能、可扩展的向量数据库。它支持各种规模的用例,从在 Jupyter Notebooks 中本地运行的演示到处理数百亿向量的大规模 Kubernetes 集群。目前,Milvus 有三种部署选项:Milvus Lite、Milvus Standalone 和 Milvus Distributed。
1.1 Milvus Lite
Milvus Lite是一个 Python 库,可导入到您的应用程序中。作为 Milvus 的轻量级版本,它非常适合在 Jupyter 笔记本或资源有限的智能设备上运行快速原型。Milvus Lite 支持与 Milvus 其他部署相同的 API。与 Milvus Lite 交互的客户端代码也能与其他部署模式下的 Milvus 实例协同工作。
要将 Milvus Lite 集成到应用程序中,请运行pip install pymilvus
进行安装,并使用MilvusClient("./demo.db")
语句实例化一个带有本地文件的向量数据库,以持久化所有数据。
1.2 Milvus 单机版
Milvus Standalone 是单机服务器部署。Milvus Standalone 的所有组件都打包到一个Docker 镜像中,部署起来非常方便。如果你有生产工作负载,但又不想使用 Kubernetes,那么在内存充足的单机上运行 Milvus Standalone 是一个不错的选择。此外,Milvus Standalone 通过主从复制支持高可用性。
1.3 分布式 Milvus
Milvus Distributed 可部署在kubernetes集群上。这种部署采用云原生架构,摄取负载和搜索查询分别由独立节点处理,允许关键组件冗余。它具有最高的可扩展性和可用性,并能灵活定制每个组件中分配的资源。Milvus Distributed 是在生产中运行大规模向量搜索系统的企业用户的首选。
1.4 部署选择
部署模式的选择通常取决于应用程序的开发阶段:
-
用于快速原型开发
如果您想快速构建原型或用于学习,如检索增强生成(RAG)演示、人工智能聊天机器人、多模态搜索,Milvus Lite 本身或 Milvus Lite 与 Milvus Standalone 的组合都很适合。您可以在笔记本中使用 Milvus Lite 进行快速原型开发,并探索各种方法,如 RAG 中的不同分块策略。您可能希望在小规模生产中部署用 Milvus Lite 构建的应用程序,为真正的用户提供服务,或在更大的数据集(例如超过几百万个向量)上验证想法。Milvus Standalone 是合适的选择。Milvus Lite 的应用逻辑仍可共享,因为所有 Milvus 部署都有相同的客户端应用程序接口。Milvus Lite 中存储的数据也可以通过命令行工具移植到 Milvus Standalone 中。
-
小规模生产部署
对于早期生产阶段,当项目仍在寻求产品与市场的契合,敏捷性比可扩展性更重要时,Milvus Standalone 是最佳选择。只要有足够的机器资源,它仍然可以扩展到 1 亿向量,同时对 DevOps 的要求也比维护 K8s 集群低得多。
-
大规模生产部署
当你的业务快速增长,数据规模超过单台服务器的容量时,是时候考虑 Milvus Distributed 了。你可以继续使用Milvus Standalone作为开发或暂存环境,并操作运行Milvus Distributed的K8s集群。这可以支持你处理数百亿个向量,还能根据你的特定工作负载(如高读取、低写入或高写入、低读取的情况)灵活调整节点大小。
-
边缘设备上的本地搜索
对于在边缘设备上通过私有或敏感信息进行搜索,您可以在设备上部署 Milvus Lite,而无需依赖基于云的服务来进行文本或图像搜索。这适用于专有文档搜索或设备上对象检测等情况。
Milvus 部署模式的选择取决于项目的阶段和规模。Milvus 为从快速原型开发到大规模企业部署的各种需求提供了灵活而强大的解决方案。
- Milvus Lite建议用于较小的数据集,多达几百万个向量。
- Milvus Standalone适用于中型数据集,可扩展至 1 亿向量。
- Milvus 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 操作符 | ✔️ | ✔️ | ✔️ |
高级数据管理 | 不适用 | 访问控制 分区 分区密钥 | 访问控制 分区 分区密钥 物理资源分组 |
一致性级别 | 强 | 强 有界稳定性 会话 最终 | 强 有界稳定性 会话 最终 |
2 安装Milvus
2.1 本地运行 Milvus Lite
Milvus Lite 是Milvus的轻量级版本,Milvus 是一个开源向量数据库,通过向量嵌入和相似性搜索为人工智能应用提供支持。Milvus Lite 可导入您的 Python 应用程序,提供 Milvus 的核心向量搜索功能。Milvus Lite 已包含在Milvus的Python SDK 中。它可以通过pip install pymilvus
简单地部署。
Milvus Lite 目前支持以下环境:
- Ubuntu >= 20.04(x86_64 和 arm64)
- MacOS >= 11.0(苹果硅 M1/M2 和 x86_64)
pip install -U pymilvus
我们建议使用pymilvus
。由于milvus-lite
已包含在pymilvus
2.4.2 或更高版本中,因此可通过pip install
与-U
强制更新到最新版本,milvus-lite
会自动安装。如果你想明确安装milvus-lite
软件包,或者你已经安装了旧版本的milvus-lite
并想更新它,可以使用pip install -U milvus-lite
。
在pymilvus
中,指定一个本地文件名作为 MilvusClient 的 uri 参数将使用 Milvus Lite。
from pymilvus import MilvusClient
client = MilvusClient("./milvus_demo.db")
运行上述代码段后,将在当前文件夹下生成名为milvus_demo.db 的数据库文件。请注意,同样的 API 也适用于 Milvus Standalone、Milvus Distributed 和 Zilliz Cloud,唯一的区别是将本地文件名替换为远程服务器端点和凭据,例如
client = MilvusClient(uri="http://localhost:19530", token="username:password")
2.2 运行 Milvus Standalone
2.2.1 在 Docker 中安装 Milvus
Milvus 提供了一个安装脚本,可将其安装为 docker 容器。该脚本可在Milvus 存储库中找到。要在 Docker 中安装 Milvus,只需运行
# 下载安装脚本
$ curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh# 启动Docker容器
$ bash standalone_embed.sh start
运行安装脚本后
- 一个名为 Milvus 的 docker 容器已在19530 端口启动。
- 嵌入式 etcd 与 Milvus 安装在同一个容器中,服务端口为2379。它的配置文件被映射到当前文件夹中的embedEtcd.yaml。
- 要更改 Milvus 的默认配置,请将您的设置添加到当前文件夹中的user.yaml文件,然后重新启动服务。
- Milvus 数据卷被映射到当前文件夹中的volumes/milvus。
你可以访问 Milvus WebUI,网址是http://127.0.0.1:9091/webui/
,了解有关 Milvus 实例的更多信息。停止和删除 Milvus
# 停止Milvus
$ bash standalone_embed.sh stop# 删除Milvus数据
$ bash standalone_embed.sh delete
你可以按以下步骤升级最新版本的 Milvus
# 升级Milvus
$ bash standalone_embed.sh upgrade
2.2.2 使用 Docker Compose 运行 Milvus (Linux)
Milvus 在 Milvus 资源库中提供了 Docker Compose 配置文件。要使用 Docker Compose 安装 Milvus,只需运行
# 下载配置文件
wget https://github.com/milvus-io/milvus/releases/download/v2.5.9/milvus-standalone-docker-compose.yml -O docker-compose.yml
Start Milvus
sudo docker compose up -d# 运行结果
Creating milvus-etcd ... done
Creating milvus-minio ... done
Creating milvus-standalone ... done
启动 Milvus 后
- 名为milvus- standalone、milvus-minio 和milvus-etcd的容器启动。
- milvus-etcd容器不向主机暴露任何端口,并将其数据映射到当前文件夹中的volumes/etcd。
- milvus-minio容器使用默认身份验证凭据在本地为端口9090和9091提供服务,并将其数据映射到当前文件夹中的volumes/minio。
- Milvus-standalone容器使用默认设置为本地19530端口提供服务,并将其数据映射到当前文件夹中的volumes/milvus。
你可以使用docker-compose ps命令检查容器是否启动并运行:
你还可以访问 Milvus WebUI,网址是http://127.0.0.1:9091/webui/
,了解有关 Milvus 实例的更多信息。停止和删除 Milvus
# 停止Milvus
sudo docker compose down
# 删除业务数据
sudo rm -rf volumes
2.2.3 使用 Docker Compose 运行 Milvus(Windows)
在 Microsoft Windows 上安装 Docker Desktop 后,就可以在管理员模式下通过 PowerShell 或 Windows 命令提示符访问 Docker CLI。你可以在 PowerShell、Windows Command Prompt 或 WSL 2 中运行 Docker Compose 来启动 Milvus。
从 PowerShell 或 Windows 命令提示符
- 在管理员模式下右击并选择以管理员身份运行,打开 Docker Desktop。
- 在 PowerShell 或 Windows 命令提示符中运行以下命令,为 Milvus Standalone 下载 Docker Compose 配置文件并启动 Milvus。
# 下载配置文件,并将其重命名为docker-compose.yml
C:\>Invoke-WebRequest https://github.com/milvus-io/milvus/releases/download/v2.4.15/milvus-standalone-docker-compose.yml -OutFile docker-compose.yml# 启动Milvus
C:\>docker compose up -d# 运行结果
Creating milvus-etcd ... done
Creating milvus-minio ... done
Creating milvus-standalone ... done
根据网络连接情况,下载用于安装 Milvus 的映像可能需要一段时间。名为milvus- standalone、milvus-minio 和milvus-etcd的容器启动后,你可以看到
- milvus-etcd容器不向主机暴露任何端口,并将其数据映射到当前文件夹中的volumes/etcd。
- milvus-minio容器使用默认身份验证凭据在本地为端口9090和9091提供服务,并将其数据映射到当前文件夹中的volumes/minio。
- milvus-standalone容器使用默认设置为本地19530端口提供服务,并将其数据映射到当前文件夹中的volumes/milvus。
如果安装了 WSL 2,还可以调用 Linux 版本的 Docker Compose 命令。该步骤与在 Linux 系统中使用 Docker Compose 安装 Milvus 一样。