Milvus向量数据库:从部署到实战全指南
摘要: Milvus是一款开源向量数据库,专为大规模向量检索和AI应用设计。本文详细讲解其部署与使用流程: 部署 单机版:通过Docker Compose快速部署,适用于开发和测试环境。 集群版:基于Kubernetes和Helm部署,支持生产环境的高可用与扩展。 使用 通过Python SDK连接数据库,支持集合(Collection)创建、索引构建及数据插入。 提供向量相似性搜索功能,支持混合
·
Milvus 是一款开源的向量数据库,专为大规模向量相似性搜索和 AI 应用设计,支持高效的非结构化数据检索。以下是从部署到使用的全流程详细讲解:
一、部署 Milvus
1. 单机部署(Docker Compose 方式)
适用场景:测试、开发环境,数据量较小。
步骤:
-
安装 Docker 和 Docker Compose:
- 确保系统已安装 Docker 和 Docker Compose。
- 可以通过命令
docker --version和docker-compose --version检查是否安装成功。
-
下载 Milvus 的 Docker Compose 配置文件:
- 从 Milvus 的 GitHub 仓库下载最新版本的
milvus-standalone-docker-compose.yml文件。 - 或者使用命令
wget https://github.com/milvus-io/milvus/releases/download/v<version>/milvus-standalone-docker-compose.yml -O docker-compose.yml(将<version>替换为实际版本号)。
- 从 Milvus 的 GitHub 仓库下载最新版本的
-
启动 Milvus 服务:
- 在配置文件所在目录下执行命令
docker-compose up -d。 - 这将启动 Milvus 的三个核心组件容器:
milvus-etcd(元数据存储)、milvus-minio(对象存储)和milvus-standalone(核心服务)。
- 在配置文件所在目录下执行命令
-
验证服务状态:
- 使用命令
docker-compose ps查看容器状态,确保所有容器都正常运行。 - 可以通过访问
http://localhost:9091/api/v1/health(或 Milvus 服务器的 IP 地址)来验证 Milvus 服务是否健康。
- 使用命令
2. 集群部署(生产环境)
适用场景:生产环境,数据量较大,需要高可用性和可扩展性。
步骤:
-
准备 Kubernetes 环境:
- 确保有一个可用的 Kubernetes 集群。
-
使用 Helm 部署 Milvus:
- 安装 Helm(如果尚未安装)。
- 添加 Milvus 的 Helm 仓库:
helm repo add milvus https://milvus-io.github.io/milvus-helm/。 - 更新 Helm 仓库:
helm repo update。 - 创建 Milvus 的命名空间(可选):
kubectl create namespace milvus。 - 使用 Helm 安装 Milvus:
helm install milvus milvus/milvus -n milvus(可以根据需要自定义配置)。
-
验证集群状态:
- 使用
kubectl get pods -n milvus查看 Milvus 集群的 Pod 状态。 - 确保所有核心组件(如
milvus-proxy、milvus-datacoord、milvus-indexcoord等)都正常运行。
- 使用
二、使用 Milvus
1. 连接 Milvus
使用 Python SDK 连接:
-
安装 PyMilvus:
- 使用命令
pip install pymilvus安装 PyMilvus 库。
- 使用命令
-
创建连接:
from pymilvus import connections connections.connect(alias="default", host='localhost', port='19530') # 如果是远程部署,将 'localhost' 替换为 Milvus 服务器的 IP 地址
2. 数据模型操作
创建集合(Collection):
-
定义字段:
from pymilvus import FieldSchema, CollectionSchema, DataType fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128), # 假设向量维度为 128 FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=512) # 元数据字段 ] -
创建集合:
from pymilvus import Collection schema = CollectionSchema(fields=fields, description="文本向量集合") collection = Collection(name="text_embeddings", schema=schema)
创建索引:
-
选择索引类型和参数:
index_params = { "metric_type": "L2", # 欧氏距离 "index_type": "HNSW", # HNSW 索引 "params": {"M": 16, "efConstruction": 200} # HNSW 索引参数 } -
创建索引:
collection.create_index(field_name="embedding", index_params=index_params) -
加载集合到内存:
collection.load() # 检索前必须执行
3. 数据操作
插入数据:
import random
# 生成随机向量和文本
vectors = [[random.random() for _ in range(128)] for _ in range(1000)]
texts = [f"文本_{i}" for i in range(1000)]
# 插入数据
data = [vectors, texts]
insert_result = collection.insert(data)
print(f"插入 ID: {insert_result.primary_keys[:5]}")
检索向量:
# 准备查询向量
query_vector = [random.random() for _ in range(128)]
# 检索参数
search_params = {
"metric_type": "L2",
"params": {"ef": 50} # HNSW 检索参数
}
# 执行检索
results = collection.search(
data=[query_vector], # 查询向量列表
anns_field="embedding", # 查询的向量字段
param=search_params, # 检索参数
limit=10, # 返回 Top10 结果
output_fields=["text"] # 返回的元数据字段
)
# 处理结果
for hit in results[0]:
print(f"ID: {hit.id}, 距离: {hit.distance}, 文本: {hit.entity.get('text')}")
混合查询(向量 + 过滤条件):
# 向量检索 + 元数据过滤(如文本包含 "重要")
results = collection.search(
data=[query_vector],
anns_field="embedding",
param=search_params,
limit=10,
expr="text like '%重要%'" # SQL-like 过滤表达式
)
4. 集合管理
查看集合信息:
print(f"集合行数: {collection.num_entities}")
print(f"集合描述: {collection.description}")
删除集合:
collection.drop() # 谨慎操作,删除后数据无法恢复
三、进阶功能
1. 使用图形化管理工具 Attu
-
部署 Attu:
- Attu 是 Milvus 的官方图形化管理工具,可以通过 Docker 部署。
- 下载 Attu 的 Docker Compose 配置文件并启动服务。
-
连接 Milvus:
- 打开 Attu 的 Web 界面,输入 Milvus 服务器的 IP 地址和端口(默认为 19530)进行连接。
-
管理集合和数据:
- 在 Attu 界面上可以直观地创建、查看、编辑和删除集合,以及插入、查询和删除数据。
2. 性能优化
-
选择合适的索引类型和参数:
- 根据数据量和查询场景选择合适的索引类型(如 IVF_FLAT、HNSW、DiskANN 等)和参数。
-
调整批量插入和查询大小:
- 根据系统资源调整批量插入和查询的大小,以平衡性能和资源消耗。
-
监控和调优:
- 使用 Milvus 的监控工具(如 Prometheus 和 Grafana)监控系统性能,并根据监控结果进行调优。
更多推荐
所有评论(0)