如何安装一个测试用的milvus数据库

安装milvus数据库

我使用的是Ubuntu 20.4操作系统,操作系统详细版本如下:

bash 复制代码
Linux user-SYS-7049GP-TRT 5.15.0-139-generic #149~20.04.1-Ubuntu SMP Wed Apr 16 08:29:56 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

因为是为了测试开发使用,我使用docker进行安装,更加简单方便,我的服务器上面已经安装了docker。

bash 复制代码
docker -v
Docker version 28.1.1, build 4eba377

docker-compose -v
docker-compose version 1.25.0, build unknown

从github上下载安装milvus所用的docker-compose.yml:

bash 复制代码
git clone https://github.com/milvus-io/milvus.git
cd ./milvus/deployments/docker/standalone

打开docker-compose.yml文件,我们会发现milvus数据库依赖其他两个软件minio和etcd。

minio:是一款对象存储文件系统,可以一键安装部署,使用方便。它实现了AWS S3标准接口,其他实现了AWS S3标准的对象存储文件系统,如阿里云OSS等,可以替代此处的minio,milvus也支持使用本地存储。这里依赖minio的原因是milvus本身并不存储向量,而是将向量文件上传到minio中。

etcd:是一个强一致性分布式键值存储系统,在milvus进行生产环境分布式部署有很大作用。etcd 可以对milvus的多个服务组件(QueryNode、DataNode、IndexNode)等进行一致性管理,etcd可以作为注册中心,记录集群拓扑结构和当前分片分布,分布式锁和主节点选举等都会使用到etcd。

启动milvus:

复制代码
sudo docker-compose up -d

在使用上面命令安装的时候,minio和milvus的镜像因为网络问题,一直无法下载成功,想了个不大方便的法子,现在本地下载成功(本地能够科学上网),然后打包上传到服务器:

bash 复制代码
# 下载镜像到本地
# 注意一定要加--platform=linux/amd64,不然本地下载的在Ubuntu服务器可能无法使用
# 因为使用的处理器架构可能不同
docker pull minio/minio:RELEASE.2024-05-28T17-19-04Z --platform=linux/amd64 

# 在本地将镜像压缩
docker save -o minio_2024-05-28T17-19-04Z.tar minio/minio:RELEASE.2024-05-28T17-19-04Z

# 将tar包上传到服务器后,使用下面的指令加载镜像
docker load -i minio_2024-05-28T17-19-04Z.tar

下面是minio的界面:

连接milvus

这里通过pymilvus库连接milvus数据库。我通过anaconda安装的Python 3.11环境,使用如下代码测试milvus的连接性:

python 复制代码
from pymilvus import connections
connections.connect("default", host="127.0.0.1", port="19530")

代码执行没有报错,说明连接成功,19530是milvus的默认端口

测试向milvus数据库中写入数据

python 复制代码
from pymilvus import connections
from pymilvus import CollectionSchema, FieldSchema, DataType, Collection
import random
def create_connection(host='localhost', port='19530'):
    connections.connect(alias="default", host=host, port=port)

def create_collection():
    # 创建一个表,定义字段, id 和 一个向量
    fields = [
        FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=False),
        FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128),
    ]

    # 定义 schema
    schema = CollectionSchema(fields, description="example collection")
    # 创建集合
    collection = Collection(name="test_collection", schema=schema)
    return collection


def insert_data(collection, ids=[1]):
    # 一条 ID 和一条 128 维向量
    ids = ids
    vectors = [[random.random() for _ in range(128)]]
    # 插入数据
    collection.insert([ids, vectors])


def create_index(collection):
    # 创建索引
    index_params = {
        "metric_type": "L2",  # 或者 "IP",L2表示欧几里得距离,通过这个距离表示向量的相似度
        "index_type": "IVF_FLAT",  # 分桶后线性扫描,搜索快,插入慢
        "params": {"nlist": 128},  # 构建时,Milvus 会将所有向量聚类成 nlist 个桶(比如 128 个),这和minio存储有关
    }
    collection.create_index(field_name="embedding", index_params=index_params)


def search_data(collection):
    # 搜索数据
    collection.load()
    search_params = {
        "metric_type": "L2",
        "params": {"nprobe": 10}  # 搜索时要扫描多少个桶, 推荐值范围:nprobe = nlist * 0.1 ~ 0.5
    }
    results = collection.search(
        # 这里生成一个新的128维度的向量V,查找此时collection中向量V距离最近的向量
        data=[[random.random() for _ in range(128)]],  # 查询向量
        anns_field="embedding",  # anns,一种向量搜索方式,近似最近邻搜索,表示在哪个字段中做搜索
        param=search_params,
        limit=5,  # 每个查询向量返回 最相似的前 5 个向量
        output_fields=["id"]  # 表示返回结果中除了系统的向量距离外,还要包含哪些原始字段
    )
    for hits in results:
        for hit in hits:
            print(f"ID: {hit.entity.get('id')}, distance: {hit.distance}")


if __name__ == '__main__':
    create_connection()
    collection = create_collection()
    insert_data(collection, ids=[3])
    create_index(collection)
    search_data(collection)

输出结果:

python 复制代码
ID: 4, distance: 17.522409439086914
ID: 1, distance: 19.932241439819336
ID: 3, distance: 19.9774169921875

这输出了几个相似度最高的矩阵。可以看到minio中此时已经有数据:

卸载milvus数据库

我们的milvus数据库是通过docker compose安装的,卸载也很方便:

复制代码
sudo docker-compose down -v

以上是如何安装milvus数据库以及其简单使用,后面将继续学习分享。

相关推荐
大数据张老师14 分钟前
用 AI 做数据分析:从“数字”里挖“规律”
大数据·人工智能
音视频牛哥42 分钟前
如何打造毫秒级响应的RTSP播放器:架构拆解与实战优化指南
人工智能·机器人·音视频开发
张较瘦_1 小时前
[论文阅读] 人工智能 + 软件工程 | NoCode-bench:评估LLM无代码功能添加能力的新基准
论文阅读·人工智能·软件工程
go54631584651 小时前
Python点阵字生成与优化:从基础实现到高级渲染技术
开发语言·人工智能·python·深度学习·分类·数据挖掘
Coovally AI模型快速验证1 小时前
避开算力坑!无人机桥梁检测场景下YOLO模型选型指南
人工智能·深度学习·yolo·计算机视觉·目标跟踪·无人机
巫婆理发2221 小时前
神经网络(第二课第一周)
人工智能·深度学习·神经网络
欧阳小猜2 小时前
OpenCV-图像预处理➁【图像插值方法、边缘填充策略、图像矫正、掩膜应用、水印添加,图像的噪点消除】
人工智能·opencv·计算机视觉
旭日东升的xu.2 小时前
OpenCV(04)梯度处理,边缘检测,绘制轮廓,凸包特征检测,轮廓特征查找
人工智能·opencv·计算机视觉
liliangcsdn2 小时前
mac测试ollama llamaindex
数据仓库·人工智能·prompt·llama
qyhua2 小时前
Windows 平台源码部署 Dify教程(不依赖 Docker)
人工智能·windows·python