当前位置: 首页 > news >正文

向量数据库Milvus的部署与使用

Milvus介绍

Milvus是一个开源、高性能、高扩展性的向量数据库,Milvus可以用来存储文本、图像、音频等非结构化数据,本质上是用Embeddings将非结构化数据转换成能够捕捉其基本特征的数字向量,然后将这些向量存储在向量数据库中,从而实现搜索和分析。

Milvus适合各种规模的人工智能应用,在知识库、语义搜索、检索增强生成(RAG)等人工智能应用中发挥着举足轻重的作用。

Milvus 提供三种部署模式,分别是Milvus Lite、Milvus Standalone和Milvus Distributed:

  • Milvus Lite:Milvus的轻量级版本,可以在python中安装pymilvus库来进行使用,适合进行快速原型开发,或在资源有限的设备上运行;
  • Milvus Standalone :单机服务器部署版本,其运行所需组件可以通过docker-compose快速便捷部署;
  • Milvus Distributed :分布式部署版本,部署在 Kubernetes 集群上,采用云原生架构,专为十亿规模甚至更大的场景而设计。

本篇文章将在Linux环境中使用Docker Compose部署Milvus Standalone版本,然后通过python远程连接Milvus服务器并进行一些Milvus数据库的基本操作。另外也将介绍Milvus可视化工具Attu的安装使用。

环境准备

Milvus Standalone可以在Linux、MacOS等操作系统上安装,下表是其对操作系统及软件的要求:

操作系统软件
macOS 10.14 或更高版本Docker 桌面
Linux 平台Docker 19.03 或更高版本Docker Compose 1.25.1 或更高版本
已启用 WSL 2 的 WindowsDocker 桌面

Docker的安装

Milvus Standalone需要使用Docker Compose来配置安装,因此先检查有没有安装Docker。

#查看docker版本
docker --version

如果正常显示版本,说明docker已安装,否则需要先安装docker,这个比较简单,可以自行安装。


在这里插入图片描述


Docker-Compose的安装

检查是否已安装Docker-Compose。

#查看docker-compose版本
docker-compose --version

在这里插入图片描述


如果如上图所示没有安装Docker-Compose,可以使用下面的命令来安装。

#指定存放路径
cd /usr/bin
#latest可以替换为具体版本号 
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose#如需卸载,可以执行
#rm -f /usr/bin/docker-compose

赋予执行权限。

chmod +x /usr/bin/docker-compose

安装完成后再次查看。

docker-compose --version

在这里插入图片描述


安装Milvus

有了Docker和Docker Compose,就可以部署Milvus Standalone了。

1.首先获取Milvus的Docker Compose配置文件 milvus-standalone-docker-compose.yml

#创建文件夹,用于存放配置文件
mkdir -p /export/server/milvus
#获取配置文件,v2.5.10版本号可以按需更改
wget https://github.com/milvus-io/milvus/releases/download/v2.5.10/milvus-standalone-docker-compose.yml -O docker-compose.yml

注:配置文件里面列出了部署Milvus Standalone所需的docker镜像、端口等配置信息,如因网络问题不能正常通过wget获取milvus-standalone-docker-compose.yml配置文件,也可以手动创建一个名为docker-compose.yml的配置文件,里面要放入的配置信息如下:

version: '3.5'services:etcd:container_name: milvus-etcdimage: quay.io/coreos/etcd:v3.5.18environment:- ETCD_AUTO_COMPACTION_MODE=revision- ETCD_AUTO_COMPACTION_RETENTION=1000- ETCD_QUOTA_BACKEND_BYTES=4294967296- ETCD_SNAPSHOT_COUNT=50000volumes:- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcdcommand: etcd -advertise-client-urls=http://etcd:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcdhealthcheck:test: ["CMD", "etcdctl", "endpoint", "health"]interval: 30stimeout: 20sretries: 3minio:container_name: milvus-minioimage: minio/minio:RELEASE.2023-03-20T20-16-18Zenvironment:MINIO_ACCESS_KEY: minioadminMINIO_SECRET_KEY: minioadminports:- "9001:9001"- "9000:9000"volumes:- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_datacommand: minio server /minio_data --console-address ":9001"healthcheck:test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]interval: 30stimeout: 20sretries: 3standalone:container_name: milvus-standaloneimage: milvusdb/milvus:v2.5.10command: ["milvus", "run", "standalone"]security_opt:- seccomp:unconfinedenvironment:ETCD_ENDPOINTS: etcd:2379MINIO_ADDRESS: minio:9000volumes:- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvushealthcheck:test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]interval: 30sstart_period: 90stimeout: 20sretries: 3ports:- "19530:19530"- "9091:9091"depends_on:- "etcd"- "minio"networks:default:name: milvus

2.拉取配置文件后进行启动

#启动,启动前可以通过netstat -tanlp查看端口监听情况
sudo docker compose up -d

正常启动如下图所示。


在这里插入图片描述


注:如因配置源或网络问题导致下载缓慢或不能下载所需镜像文件,也可以单独使用docker pull来下载好所需镜像文件后再运行sudo docker compose up -d。

比如对于上面的配置文件里面列出所需的三个镜像文件:

  • image: quay.io/coreos/etcd:v3.5.18
  • image: minio/minio:RELEASE.2023-03-20T20-16-18Z
  • image: milvusdb/milvus:v2.5.10
#下载etcd镜像,其他两个一样操作。
docker pull quay.io/coreos/etcd:v3.5.18
#查看镜像
#docker images

另外,如果想更换配置源,可以在daemon.json文件中添加配置源。

#编辑daemon.json,打开后自行添加配置源
vim /etc/docker/daemon.json
#然后重启docker服务使更改生效
sudo systemctl daemon-reload
sudo systemctl restart docker

3.检查容器是否正常启动运行

#检查容器启动运行情况,此时再通过netstat -tanlp命令可以看到端口19530等已处于监听中
docker-compose ps#查看Milvus日志
#docker-compose logs -f standalone

在这里插入图片描述


4.访问Milvus的WebUI页面

Milvus WebUI 是Milvus的图形化管理工具,从v2.5.0版本开始才有。它能列出详细的 Milvus 配置,可用来观察Milvus组件和依赖关系的统计与指标、检查数据库和Collections的详细信息。

#访问Milvus WebUI
http://你的IP地址:9091/webui/

在这里插入图片描述


5.停止Milvus服务与删除数据

#停止Milvus
cd /export/server/milvus
sudo docker compose down#删除数据
#cd /export/server/milvus
#sudo rm -rf volumes

安装Attu

Attu是一个多合一的Milvus管理工具,Attu旨在管理Milvus并与之交互,它能提供以下功能:

  • 数据库、集合和分区管理:有效地组织和管理Milvus设置;

  • 向量嵌入的插入、索引和查询:轻松处理Milvus向量数据操作;

  • 执行矢量搜索:使用矢量搜索功能快速验证结果;

  • 用户和角色管理:轻松管理Milvus权限和安全性;

  • 查看系统拓扑:可视化Milvus系统架构以实现更好的管理和优化。

Attu安装很简单,在启动Milvus服务后,执行以下命令来安装Attu。

#安装Attu
docker run -p 8000:3000 -e HOST_URL=你的IP地址:8000 -e MILVUS_URL=你的IP地址:19530 zilliz/attu:latest

安装完成后访问图形界面。

#访问
http://你的IP地址:8000

在这里插入图片描述


点击 连接 后进入数据库管理页面。


在这里插入图片描述


Milvus的远程连接与基本操作

在部署好Milvus Standalone后,我们可以在python里面远程连接Milvus服务器,然后对Milvus数据库进行一些操作。

1.首先安装pymilvus

#安装pymilvus
!pip install -U pymilvus
#如果上面语句安装比较慢,可以使用国内其他源,如:
#!pip install -U pymilvus -i https://pypi.tuna.tsinghua.edu.cn/simple/

2.实例化一个MilvusClient并连接远程Milvus服务

from pymilvus import MilvusClient
client = MilvusClient(uri="你的IP地址:19530", token="username:password")

3.创建一个测试数据库

client.create_database(db_name="milvus_testdb1")
#列出所有数据库
#client.list_databases()

可以在Attu中看到数据库已成功创建。


在这里插入图片描述


4.创建Collections

client = MilvusClient(uri="你的IP地址:19530", token="username:password", db_name='milvus_testdb1')
#创建Collections,Collections类似传统SQL数据库中的表。
if client.has_collection(collection_name="demo_collection"):client.drop_collection(collection_name="demo_collection")
client.create_collection(collection_name="demo_collection",dimension=768 #向量维度
)

5.插入向量数据

#使用随机生成的假向量表示来演示
import random
#原始文档
docs = ["Efficiently organize and manage your Milvus setup.","Easily handle Milvus vector data operations.","Visualize Milvus system architecture for better management and optimization.",
]
#文档对应生成的embedding表示(假向量表示,真实向量表示需要导入词嵌入模型来实现)
vectors = [[random.uniform(-1, 1) for _ in range(768)] for _ in docs]
#Milvus以字典列表的形式插入数据,列表中的每个字典代表一条数据记录,称为实体。
data = [{"id": i, "vector": vectors[i], "text": docs[i], "subject": "attu_description"} for i in range(len(vectors))
]print("Data has", len(data), "entities, each with fields: ", data[0].keys())
print("Vector dim:", len(data[0]["vector"]))#插入数据,把数据插入Collections
res = client.insert(collection_name="demo_collection", data=data)
print(res)

可以看到插入的三条向量数据如下:


在这里插入图片描述


基本操作就演示到这,更深入的操作可以自行探索。

相关文章:

  • quickbi finebi 测评(案例讲解)
  • OpenCV 图形API(70)图像与通道拼接函数-----创建一个图像或矩阵(GMat)的副本的操作函数copy()
  • 应用在通信网络设备的爱普生晶振SG2016CBN
  • DeepSeek创始人梁文峰是个什么样的人?
  • Linux调试器 - gdb使用指南
  • C#/.NET/.NET Core技术前沿周刊 | 第 36 期(2025年4.21-4.27)
  • GRPO vs SFT:强化学习提升大模型多模态推理泛化能力的原因研究
  • 关于windows API 的键鼠可控可测
  • Ocelot的应用案例
  • JDBC之Blob类型使用的实现
  • [特殊字符] 基于Docker部署Nacos注册中心及微服务注册发现详解(含MySQL持久化配置)
  • Mariadb 防火墙服务器和端口:mysql | 3306
  • Linux下Code_saturne源码编译安装及使用
  • 第一节:Linux系统简介
  • 相机-IMU联合标定:IMU标定
  • 提高营销活动ROI:大数据驱动的精准决策
  • 4月28日信息差全景:国际局势、科技突破与市场震荡一、国际政治与安全:俄乌冲突关键转折
  • 爬虫学习笔记(一)
  • 硬件加密+本地部署,大模型一体机如何打造AI安全护城河?
  • 信创时代技术栈选择与前景分析:国产替代背景下的战略路径与实践指南
  • 卡尼领导的加拿大自由党在联邦众议院选举中获胜
  • 长三角议事厅·周报|长三角游戏出海,关键在“生态输出”
  • 西班牙葡萄牙遭遇史上最严重停电:交通瘫了,通信崩了,民众疯抢物资
  • 特朗普声称中方领导人打了电话,外交部:近期中美元首没有通话
  • 脱发后怎么把头发养回来?脱发自救指南来了
  • 清华数字政府与治理研究院揭牌:服务数字政府建设需求