Milvus向量数据库是什么?
简单来说,Milvus 是一款专门为处理海量向量数据而设计的开源向量数据库。它的核心目标是高效地存储、索引和检索向量。
为了更好地理解,我们把它拆解成几个部分:
1. 什么是“向量”?
在人工智能和机器学习领域,文本、图像、音频、视频等非结构化数据通常被转换为数学表示,即一系列数字,这就是向量(或称为“嵌入”,Embedding)。
-
例如:
-
一段文字可以通过模型(如 BERT)转换为一个 768 维的向量。
-
一张图片可以通过模型(如 ResNet)转换为一个 1024 维的向量。
-
一段音频也可以被转换为一个特定维度的向量。
-
这些向量有一个关键特性:语义相近的数据,其对应的向量在向量空间中的距离也更近。
2. Milvus 的核心功能:相似性搜索
Milvus 的核心工作就是快速地从海量的向量集合中,找到与目标向量最相似的 Top-K 个向量。这种操作称为近似最近邻搜索(Approximate Nearest Neighbor Search, ANNS)。
-
举个例子:你有一张猫的图片,想从图库中找到所有包含猫的图片。
-
你的查询图片首先被AI模型转换为一个向量 V_query。
-
Milvus 会计算 V_query 与图库中所有已存储图片向量的“距离”(如欧氏距离、余弦距离等)。
-
最后,返回距离最近(即最相似)的几张图片作为结果。
-
Milvus 的强大之处在于,它通过专门的索引(如 IVF_FLAT、HNSW、DISKANN 等)来加速这个搜索过程,使其能在毫秒级别从十亿甚至万亿级别的向量中返回结果,而无需进行暴力计算。
3. 为什么需要专门的向量数据库?(与传统数据库对比)
你可能会问:“为什么不能用传统的 MySQL、PostgreSQL 或 Elasticsearch 来做这个事?”
传统数据库是为处理结构化数据(如数字、字符串、日期)设计的,擅长精确匹配和范围查询。但它们在进行向量相似度搜索时效率极低,基本上是“暴力计算”,无法扩展到海量数据。
而 Milvus 是专为向量搜索而生的,它具有以下关键特性:
-
高性能:支持多种高性能索引算法,优化了计算和存储,查询速度极快。
-
高可扩展性:支持分布式部署,可以通过增加节点来轻松处理十亿、万亿级别的向量数据。
-
开发者友好:提供了丰富的 API(Python、Java、Go等)、SDK 和工具(如 Attu:图形化管理界面),并与主流的AI生态系统(如 PyTorch、TensorFlow、LangChain)无缝集成。
-
混合查询:除了向量搜索,还支持标量(结构化)数据过滤。例如:“在所有的图片向量中,查找与‘猫’最相似的,并且图片格式为‘jpg’、上传时间在‘2023年’之后的”。
-
云原生:设计上支持容灾、高可用、易扩展,可以部署在 Kubernetes 上。
4. 主要应用场景
Milvus 是构建 AI 应用的基础设施,常见应用包括:
-
相似性搜索:图片搜图片、视频搜视频、推荐系统(“猜你喜欢”)。
-
问答机器人:作为 RAG(检索增强生成)系统的核心记忆体,从海量知识库中快速检索与问题相关的文档片段,提供给大语言模型(如 ChatGPT)来生成精准答案。
-
化学分子分析:比对分子结构相似性。
-
音频指纹识别:如 Shazam 听歌识曲功能。
核心架构简介(进阶理解)
Milvus 采用读写分离的架构,自 2.0 版本后主要包括四个组件:
-
接入节点(Access Node):系统的前端,负责接收客户端请求、验证身份、协调工作。
-
协调节点(Coordinator Node):系统的大脑,负责管理集群状态、负载均衡、任务调度等。
-
工作节点(Worker Node):系统的肌肉,真正执行数据读写、索引构建和查询任务。又分为:
-
查询节点(Query Node):负责执行向量相似性搜索。
-
数据节点(Data Node):负责接收、持久化写入的向量和标量数据。
-
-
对象存储(Object Storage):通常使用 MinIO、S3 等,用于持久化存储日志和向量数据文件,实现存储与计算分离。
总结
Milvus 本质上是一个专为 AI 时代设计的数据库,它擅长处理由非结构化数据转换而来的向量,并能以极快的速度进行相似性检索。它是构建推荐系统、智能问答、图像检索等高级 AI 应用不可或缺的底层引擎。
如果您想开始使用,可以访问其官网获取文档和代码:
-
官网:Milvus | High-Performance Vector Database Built for Scale
-
GitHub:https://github.com/milvus-io/milvus