本文来源公众号“陪跑jasper”,仅用于学术分享,侵权删,干货满满。
原文链接:Milvus快速入门(常用demo)
前言:网络中充斥很多Milvus讲解,但我觉得很多概念没有介绍到,导致看起来很费劲,故此写下次快速入门,让你快速入门
1.Milvus简介
Milvus是一款开源的高性能、高可用的向量数据库,专为大规模机器学习和深度学习应用设计,旨在高效管理和检索高维向量数据。以下是Milvus的详细介绍:
一、基本信息
-
名称:Milvus
-
类型:向量数据库
-
开发:由Zilliz开发并维护,后成为LF AI & Data Foundation的托管项目之一
-
创建时间:2019年
-
特点:高性能、高可用、云原生、易拓展
二、主要功能与特性
-
高效存储与索引:
-
专门设计用于存储、索引和管理由深度神经网络和其他机器学习(ML)模型生成的大量嵌入向量。
-
能够在万亿规模上对向量进行索引,支持针对TB级向量的增删改操作和近实时查询。
-
高性能检索:
-
通过优化的索引算法(如IVF、ANNOY、HNSW等)和分布式架构,实现亚秒级的向量检索速度。
-
支持多种索引类型,可以根据数据特性和查询需求选择最合适的索引策略。
-
高可用与可扩展性:
-
支持集群部署,提供数据容错和自动恢复机制,确保服务的高可用性。
-
采用存储与计算分离的云原生设计,易于在Kubernetes等容器编排平台上部署,支持横向扩展。
-
混合查询能力:
-
在向量相似度检索过程中支持对标量字段进行过滤,实现混合查询,进一步提高召回率和搜索灵活性。
-
易用性:
-
提供丰富的API接口,支持Python、Java、Go等多种编程语言,易于集成到现有系统中。
-
提供了一整套简单直观的API,让用户可以针对不同场景选择不同的索引类型。
三、系统架构与组件
Milvus采用模块化设计,主要由以下几个核心组件构成:
-
Proxy:作为客户端请求的入口,负责负载均衡、路由请求、认证和鉴权。
-
IndexNode:负责构建和维护向量索引。
-
QueryNode:负责向量检索,执行搜索请求。
-
DataCoord:管理数据和索引的分配,以及数据的迁移和平衡。
-
DataNode:实际存储向量数据和索引文件。
-
MetaStore:存储所有元数据,包括集合(Collection)信息、分区(Partition)信息、索引信息等。
四、应用场景
Milvus在多个领域有着广泛的应用,包括但不限于:
-
图像搜索:通过提取图像特征向量,实现相似图片查找,应用于电商、社交网络的图片搜索功能。
-
文本相似度匹配:将文本转化为向量,应用于新闻推荐、问答系统中的相似问题匹配。
-
语音识别:将音频特征转换为向量,用于语音搜索、语音助手的命令识别。
-
推荐系统:结合用户行为、商品特征等向量,优化个性化推荐算法。
五、总结
Milvus作为一款专为AI时代设计的向量数据库,其高效、灵活的特性使其成为处理非结构化数据检索的理想选择。无论是科研项目还是企业级应用,Milvus都能提供强大的支撑。随着AI应用的不断深化,Milvus及其生态系统将持续发展,为开发者带来更多创新的可能性。
2.安装
环境准备
window11 wsl for window
docker,docker-compose
这些配置环境自行处理,网上很多相关介绍
tip:你可能会遇到wsl for window环境配置连接宿主机docker环境的问题,请参考https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-containers
通过docker安装
wget https://github.com/milvus-io/milvus/releases/download/v2.4.5/milvus-standalone-docker-compose.yml -O docker-compose.yml
#安装
sudo docker compose up -d
Creating milvus-etcd ... done
Creating milvus-minio ... done
Creating milvus-standalone ... done
@#关闭
sudo docker compose down
sudo rm -rf volumes
2.脚本demo(重点)
这里是讲解重点,通过解读官方脚本,让你知道一些Milvus实现原理和一些概念
下载官方demo脚本
wget https://raw.githubusercontent.com/milvus-io/pymilvus/v2.2.8/examples/hello_milvus.py
运行脚本
python hello_milvus.py
=== start connecting to Milvus ===
Does collection hello_milvus exist in Milvus: False
=== Create collection `hello_milvus` ===
=== Start inserting entities ===
Number of enti