【Milvus向量数据库】AI应用开发

news/2025/1/23 18:18:55/文章来源:https://www.cnblogs.com/o-O-oO/p/18688076

一、Milvus介绍

上一小节中,全面介绍了向量和向量数据库,今天详细介绍下其中比较出名的开源数据库Milvus。希望对你有帮助

Milvus 是一个开源的、高性能的向量数据库,专为海量向量数据的快速检索而设计。在人工智能、计算机视觉、推荐系统和其他需要处理大规模向量数据的领域有着广泛应用。
以下是从产品功能、技术特点和优势等方面对 Milvus 的详细介绍:

Milvus的产品功能

1、向量检索:

支持基于欧氏距离、内积和余弦相似度的近似最近邻(ANN)检索。

支持高维向量数据的高效检索,适用于图像、视频、音频和自然语言处理等领域。

2、多模态数据管理:

除了支持向量数据,Milvus 还提供对结构化数据、非结构化数据的管理和检索能力。

3、分布式架构:

支持分布式存储和计算,能够处理 PB 级的数据,并且具备较高的扩展性。

4、数据持久化:

自动执行数据持久化操作,确保数据的持久保存和快速恢复。

5、实时插入和查询:

支持实时数据插入和快速查询,满足在线服务的需求。

6、多种索引类型:

提供多种索引类型(如 IVF、IVF_SQ8、HNSW、ANNOY 等),用户可以根据具体应用场景选择合适的索引算法。

7、丰富的 API 和客户端支持:

提供多种 API 和客户端库,支持 Python、Java、Go 等主流编程语言,方便用户进行二次开发。

Milvus的技术特点

1、高性能:

通过优化的数据结构和算法,Milvus 能够实现高效的向量数据检索,适应不同的使用场景需求。

2、分布式架构:

采用分布式架构,具备线性扩展能力,可以处理大规模数据并保持高吞吐量和低延迟。

3、灵活的索引机制:

支持多种索引类型,并允许用户根据数据特点和查询需求选择和调整索引,提供灵活的检索方案。

4、自动数据分片和负载均衡:

自动将数据分片存储到不同的节点上,并进行负载均衡,确保系统的高可用性和高性能。

5、高可用性和容错性:

通过多副本机制和数据持久化策略,保证数据的高可用性和容错性。

6、强大的查询优化:

内置查询优化器,能够智能优化查询路径,提升查询效率。

Milvus的优势

1、开源和社区支持:

Milvus 是一个开源项目,有一个活跃的社区,提供丰富的文档和示例代码,方便用户快速上手和使用。

2、高扩展性:

采用分布式架构,具备很强的扩展性,能够轻松扩展至数百节点,处理 PB 级数据。

3、多场景适用性:

适用于多种应用场景,包括图像检索、视频检索、推荐系统、自然语言处理等领域。

4、易于集成:

提供丰富的 API 和多个编程语言的客户端库,便于集成到现有系统中。

5、高性能:

通过优化的向量检索算法和索引机制,能够在大规模数据下保持高性能的检索能力。

6、全面的数据支持:

不仅支持向量数据,还支持结构化和非结构化数据,能够满足多样化的数据管理需求。

Milvus 是一个功能强大、高性能的向量数据库,专为大规模向量数据的检索和管理而设计。其主要特点包括高性能、分布式架构、灵活的索引机制、高可用性和容错性等。凭借这些特点和优势,Milvus 在人工智能、计算机视觉、推荐系统等领域有着广泛的应用。作为一个开源项目,Milvus 拥有活跃的社区和丰富的文档支持,是开发者进行大规模向量数据处理和检索的理想选择。

二、docker 安装

Milvus的安装是通多docker镜像安装的,所以之前先安装docker

sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
sudo yum remove docker*sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.reposudo yum-config-manager \--add-repo \https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repoyum list docker-ce --showduplicates | sort -r# 注意docker-ce 和 containerd.io的版本
sudo yum install docker-ce-17.12.1.ce-1.el7.centos  containerd.io-_1.2.13-2 docker-buildx-plugin docker-compose-pluginsudo systemctl start docker
sudo docker run hello-world

三、Milvus 安装

Milvus安装参考官方文档

https://milvus.io/blog/how-to-get-started-with-milvus.md
mkdir milvus_compose
cd milvus_compose
wget https://github.com/milvus-io/milvus/releases/download/v2.2.8/milvus-standalone-docker-compose.yml -O docker-compose.yml
vim /etc/docker/daemon.json 
sudo systemctl daemon-reload
sudo systemctl restart docker
docker-compose up -d# 安装 python接口库
pip install pymilvus

需要注意Milvus和python的对应版本

四、milvus基本操作

pymilvus 是 Milvus 的官方 Python SDK,用于与 Milvus 向量数据库进行交互。pymilvus 提供了丰富的 API 用于管理集合、索引、插入数据和执行查询等操作。以下是 pymilvus 的一些基本操作介绍,包括连接到 Milvus、创建集合、插入数据、构建索引和执行查询。
1、 安装 pymilvus

首先,你需要安装 pymilvus 库:

pip install pymilvus

2、连接到 Milvus

使用 connections.connect 方法连接到 Milvus 实例:

from pymilvus import connections# 连接到本地 Milvus 实例
connections.connect(alias="default", host="localhost", port="19530")

3、创建集合

创建一个新的集合,包括定义集合的名称和字段(例如,向量字段和 id 字段):

from pymilvus import Collection, FieldSchema, CollectionSchema, DataType# 定义字段
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True)
vector_field = FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128)# 定义集合的 Schema
schema = CollectionSchema(fields=[id_field, vector_field], description="example collection")# 创建集合
collection = Collection(name="example_collection", schema=schema)

4、 插入数据

向集合中插入数据:

import numpy as np# 生成一些示例数据
ids = [i for i in range(10)]
vectors = np.random.random((10, 128)).tolist()# 插入数据
collection.insert([ids, vectors])

5、 构建索引

为向量字段构建索引以加速查询:

# 定义索引参数
index_params = {"metric_type": "L2","index_type": "IVF_FLAT","params": {"nlist": 128}
}# 创建索引
collection.create_index(field_name="vector", index_params=index_params)

6、 执行查询

执行向量检索查询:

# 加载集合到内存
collection.load()# 生成查询向量
query_vectors = np.random.random((1, 128)).tolist()# 定义搜索参数
search_params = {"metric_type": "L2","params": {"nprobe": 10}
}# 执行搜索
results = collection.search(data=query_vectors, anns_field="vector", param=search_params, limit=3,expr=None
)# 输出结果
for result in results:for hit in result:print(f"ID: {hit.id}, Distance: {hit.distance}")

7、管理集合
查看集合信息:

# 获取集合信息
print(collection.num_entities)  # 显示集合中的实体数

删除集合:

# 删除集合
collection.drop()

8、 断开连接

完成所有操作后,可以断开与 Milvus 的连接:

connections.disconnect(alias="default")

总结

通过以上步骤,你可以使用 pymilvus 执行基本的 Milvus 操作,包括连接到 Milvus、创建集合、插入数据、构建索引和执行查询。这些操作构成了使用 Milvus 进行向量数据处理的基础。pymilvus 提供了丰富的 API,可以在实际应用中满足各种向量数据管理和检索的需求。

个人观点,仅供参考

原创 WedO实验君 人工智能微客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/873789.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PassGet:一款使用Go语言编写的用于后渗透测试阶段提取Windows平台下常见的应用程序

免责声明 仅限用于技术研究和获得正式授权的攻防项目,请使用者遵守《中华人民共和国网络安全法》,切勿用于任何非法活动,若将工具做其他用途,由使用者承担全部法律及连带责任,作者及发布者不承担任何法律连带责任项目介绍 PassGet是一款使用Go语言编写的用于后渗透测试阶段…

spandsp_start_dtmf的bug及修复

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 之前的文章中介绍过DTMF从2833到inband的转换,其中inband到2833的转换使用了“spandsp_start_dtmf”,这个函数在转换的过程中有缺陷。 环境 CentOS 7.9 freeswitch 1.10.7 问题描述 在fs桥接的呼叫,经过“spandsp_star…

如何打造一个高并发系统?

今天和大家聊聊作为一个后端开发,在实际工作中,我们如何打造一个高并发的系统? 如下图所示,大概有六个层面,我们结合具体的场景直播间签到去一一细说。一、前端 1、打散请求:即把用户的接口分散一点去请求后端,尽量不要集中在某一时刻。 场景:比如直播间讲师发起了一个…

批量登录灯塔扫描的信息收集GUI工具-TDGO更新(v1.0.1)发布

GitHub: https://github.com/lxflxfcl/DTGO作者语:嘘,我正在狠狠鞭打你的灯塔 前言 上一篇文章发布的DTGO的初始版本 TDGO(灯塔狩猎者)—一款分布式灯塔信息收集工具 现在更新了一版,更新内容如下: 功能更新:主界面UI美化【由Super师傅完成】删除任务记录【删除记录时会同…

「SPOJ2666」QTREE4 - Query on a tree IV

题目概述 对一棵树维护两种操作:翻转某个点的颜色,求 \(max\{ dist_{u, v} \}\) 且满足 \(u\) 的颜色和 \(v\) 的颜色都是白色( \(u,v\) 可以相同)。 思路 首先考虑若没有修改,给定带颜色的 \(N\) 个点怎么查询。 经典办法是树形 \(\text{dp}\) ,定义\(mx_u\) 表示在 \(u…

K8S静态PVPVC配置

持久卷与动态存储 NFS-PVC-PV实战案例1、创建后端存储NFS节点 [root@web04 ~]# mkdir -pv /kubelet/pv/pv00{1..3} mkdir: created directory ‘/kubelet/pv’ mkdir: created directory ‘/kubelet/pv/pv001’ mkdir: created directory ‘/kubelet/pv/pv002’ mkdir: created…

『Python底层原理』--CPython 虚拟机

在 Python 编程的世界里,我们每天都在使用 python 命令运行程序,但你是否曾好奇这背后究竟发生了什么? 本文将初步探究 CPython(Python 中最流行的实现)的一些内部机制,为了更好的来理解 Python 语言的底层运作。 1. CPython 简介 CPython 是用** C 语言**编写的 Python …

销售转化关键:掌握真诚沟通技巧

在日常沟通中,我特别不喜欢别人一上来就问“在吗”,或者只是单纯地发一个“微笑”表情。这种开场方式,总觉得少了点诚意和温度。 如果真的有事需要找人帮忙,与其冷冰冰地问“在吗”,不如先亲切地喊出对方的名字或昵称,然后再直截了当地说明来意。这样不仅能让对方感受到你…

万不得已,千万不要去外包

之前的失业日志系列里有讲,现在的就业环境不太好,有面试机会的基本都是外包岗位。刚好之前公司和外包有几次合作,主要是把一部分或者整个项目外包的外包公司,我们技术人员负责一部分的技术支持,通过几次的合作,对外包的工作也有可一个大概的了解,想谈一下自己对外包的了…

杂项-在vscdoe上使用jupyter notebook写javascript

目录准备安装notebook对javascript的支持进一步优化支持es6安装npm包将notebook集成到vsc中去 准备python / Anaconda :推荐专业的Python开发人员使用Anaconda进行包管理和版本控制安装jupyter notebook。pip3 install jupyter notebook 正常下载之后选择一个工作目录执行jupyt…

字节 GUI 代理模型 UI-TARS:具备像人一样的感知、推理、行动能力;SLAM-Omni:支持可控音色的语音对话模型

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

htb Pandora walkthrough snmp + ssh 隧道 + 环境变量劫持

80端口web界面划到最下面发现两个邮箱 记录一下尝试加上域名dirsearch 扫描只扫到一个assets目录但是值得注意的是这个目录里面有个blog目录 也就意味着他的网站是有博客网站的 只是我们没扫描出来扫扫udp端口发现161 的 snmp是开着的用nmap 枚举进程 nmap -sU -p161 --script …