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

向量数据库Milvus01-入门与核心原理详解

Milvus向量数据库入门与核心原理详解


目录

  1. 引言
  2. Milvus的核心概念
  3. Milvus的系统架构
  4. Milvus的核心原理
  5. 总结与预告

1. 引言

什么是向量数据库?

向量数据库(Vector Database)是专为存储和查询高维度向量数据设计的系统,适用于处理文本、图像、音频等非结构化数据。传统的数据库难以高效处理这些数据,因为它们通常需要通过嵌入模型(如BERT、ResNet)将原始数据转换为数值向量(Embedding),再通过向量相似性搜索(如余弦相似度、欧氏距离)实现快速检索。

Milvus的诞生背景

Milvus 是一款高性能、可扩展的开源向量数据库,专为处理由深度神经网络和其他机器学习模型生成的大规模嵌入向量而设计。自2019年发布以来,Milvus 已成为推荐系统、图像检索、自然语言处理等领域的核心工具。其核心优势包括:

  • 高性能:支持万亿级向量数据的毫秒级检索。
  • 云原生架构:存储与计算分离,支持弹性扩展。
  • 多样化的索引策略:如 HNSW、IVF_FLAT、IVF_PQ 等。
  • 混合查询能力:支持向量相似性搜索与标量过滤的联合操作。

2. Milvus的核心概念

向量数据与非结构化数据

非结构化数据(如文本、图像、音频)需通过嵌入模型生成高维向量(Embedding Vector),例如:

  • 文本:通过 BERT 等模型生成 768 维向量。
  • 图像:通过 ResNet 等模型生成 2048 维向量。

Milvus 的核心任务是高效存储和检索这些向量数据。

Milvus vs 传统数据库

特性传统数据库Milvus 向量数据库
数据类型结构化数据(表、行、列)高维向量 + 标量元数据
查询方式SQL 过滤与聚合向量相似性搜索 + 标量过滤
索引策略B+ 树、哈希表HNSW、IVF_PQ、FLAT 等 ANN 索引
扩展性垂直扩展为主水平扩展,支持 PB 级数据

3. Milvus的系统架构

Milvus 的架构遵循 数据流与控制流分离 的原则,分为四层:

1. 接入层(Proxy)

  • 功能:接收客户端请求,路由到对应的执行节点,聚合结果返回客户端。
  • 特点:无状态代理,支持负载均衡(如 Nginx、Kubernetes Ingress)。
  • 示例:客户端通过 pymilvus SDK 连接 Milvus 服务。
from pymilvus import connections
connections.connect(host='localhost', port='19530')

2. 协调服务(Coordinator Service)

  • 核心角色
    • Root Coord:集群拓扑管理与元数据存储。
    • Data Coord:数据分配与一致性管理。
    • Query Coord:查询任务调度与负载均衡。
    • Index Coord:索引构建与优化。
  • 特点:通过 Raft 协议确保高可用性,支持动态扩缩容。

3. 执行节点(Worker Node)

  • 类型
    • Data Node:处理数据插入、更新、删除。
    • Query Node:执行向量搜索与标量过滤。
    • Index Node:构建和维护索引(如 HNSW、IVF_PQ)。
  • 特点:支持并行处理,适配 CPU/GPU 加速。

4. 存储层

  • 组件
    • 元数据存储:使用 etcd 确保强一致性。
    • 消息存储:通过 WAL(Write-Ahead Log)保证数据持久化。
    • 对象存储:支持 S3、MinIO 等,用于存储索引文件和向量数据。
  • 特点:存储与计算分离,支持 PB 级数据持久化。

4. Milvus的核心原理

1. 数据模型

Milvus 的数据模型基于 集合(Collection)字段(Field)

  • Collection:类似于传统数据库的表,存储向量和标量数据。
  • Field:定义字段类型(如 INT64FLOAT_VECTOR)和约束(如主键、向量维度)。
from pymilvus import FieldSchema, CollectionSchema, DataType
fields = [FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128)
]
schema = CollectionSchema(fields, "Example Collection")
collection = Collection("example_collection", schema)

2. 索引机制

Milvus 支持多种索引类型,适用于不同场景:

索引类型适用场景优势
FLAT小规模数据精确搜索无精度损失
IVF_FLAT中大规模数据平衡精度与速度支持标量过滤
HNSW高并发低延迟场景无需倒排索引,动态更新
IVF_PQ超大规模数据压缩存储内存占用低,适合 GPU 加速
CAGRAGPU 加速场景利用 CUDA 并行计算

索引构建示例

index_params = {"index_type": "IVF_PQ","params": {"nlist": 100, "m": 16},"metric_type": "L2"
}
collection.create_index("embedding", index_params)

3. 时间旅行机制

Milvus 通过 MVCC(多版本并发控制)LSM 树 实现时间点查询(Point-in-Time Query):

  • MVCC:记录数据的多个版本,支持按时间戳读取历史数据。
  • LSM 树:将内存数据定期刷写到磁盘,优化写入性能。

5. 总结与预告

总结

Milvus 通过云原生架构、多样化的索引策略和高效的向量检索能力,成为处理非结构化数据的核心工具。其核心价值在于:

  • 高性能:毫秒级检索万亿级向量。
  • 灵活性:支持多种索引类型和混合查询。
  • 可扩展性:存储与计算分离,适配大规模场景。

预告

在下一次博客中,我们将深入 Milvus 的实战操作,包括:

  1. 环境部署:单机版与集群版的 Docker 部署。
  2. 基础操作:通过 Python SDK 创建集合、插入数据、构建索引。
  3. 实战案例:实现语义搜索系统(如文档检索、图像相似性匹配)。

参考资料

  • Milvus 官方文档:https://milvus.io/docs/zh/
  • CSDN 技术社区:https://blog.csdn.net/
  • GitHub 仓库:https://github.com/milvus-io/milvus

版权声明:本文为原创文章,转载请注明出处。

相关文章:

  • 【samba和nfs的搭建】
  • Arduino和STM32的区别详解
  • 5.1/Q1,GBD数据库最新文章解读
  • AI扫描王APP:高效便捷的手机扫描工具,让生活更智能
  • day35 python模型可视化与推理
  • 使用防火墙禁止程序联网(这里禁止vscode)
  • 天猫平台实时商品数据 API 接入方案与开发实践
  • C++——volatile
  • Python打卡第35天
  • Ollama01-安装教程
  • C#学习第25天:GUI编程
  • 关于支付组织
  • 黑马k8s(十五)
  • Mac的显卡架构种类
  • 数据透视表和公式法在Excel中实现去除重复计数的方法
  • 攻防世界RE-666
  • exti line2 interrupt 如何写中断回调
  • 关于使用QT时写客户端连接时因使用代理出现的问题
  • GeoTools 将 Shp 导入PostGIS 空间数据库
  • 路径规划算法BFS/Astar/HybridAstar简单实现
  • 大型网站频道的建设需多人协同开发/怎么样建一个网站
  • 网站建设空间多大/百度指数分析平台
  • 本溪市建设委员会网站/武汉seo 网络推广
  • 深圳保障性住房和公租房区别/推广网站seo
  • 机械行业网站建设方案/图片识别搜索引擎
  • 推荐广州微信网站建设/网站流量统计系统