Milvus简介 #

一、什么是Milvus #

1.1 Milvus定义 #

Milvus 是一个开源的高性能向量数据库,专为 AI 应用、机器学习和相似度搜索而设计。

text
┌─────────────────────────────────────────┐
│              Milvus 架构                 │
├─────────────────────────────────────────┤
│  ┌─────────┐  ┌─────────┐  ┌─────────┐ │
│  │ AI应用   │  │ 推荐系统 │  │ 图像搜索 │ │
│  └────┬────┘  └────┬────┘  └────┬────┘ │
│       │            │            │       │
│       └────────────┼────────────┘       │
│                    ▼                    │
│       ┌─────────────────────┐          │
│       │   Milvus Server     │          │
│       │   (向量存储与检索)    │          │
│       └─────────────────────┘          │
│                    │                    │
│       ┌────────────┴────────────┐      │
│       ▼                         ▼      │
│  ┌─────────┐              ┌─────────┐  │
│  │ 索引文件 │              │ 元数据   │  │
│  └─────────┘              └─────────┘  │
└─────────────────────────────────────────┘

1.2 发展历史 #

时间 事件
2019年 Zilliz公司创建Milvus项目
2020年 Milvus 1.0发布,开源
2021年 Milvus 2.0发布,云原生架构
2022年 Milvus 2.2发布,性能大幅提升
2023年 Milvus 2.3发布,GPU索引支持
2024年 Milvus 2.4发布,增强混合搜索

1.3 为什么选择Milvus #

text
传统数据库 vs Milvus

传统数据库:
┌─────────────────────────────────────┐
│  应用 → 精确匹配查询 → 结果         │
│         无法处理相似度搜索          │
└─────────────────────────────────────┘

Milvus:
┌─────────────────────────────────────┐
│  应用 → 向量相似度搜索 → 相似结果   │
│         支持高维向量高效检索         │
└─────────────────────────────────────┘

二、Milvus核心特点 #

2.1 高性能 #

text
Milvus性能指标:

单节点搜索延迟:< 10ms(百万级向量)
分布式搜索:支持十亿级向量
吞吐量:> 10,000 QPS

原因:
1. 先进的索引算法
2. GPU加速支持
3. 分布式架构
4. 列式存储

2.2 丰富的索引类型 #

索引类型 说明 适用场景
FLAT 暴力搜索 小数据集、高精度
IVF_FLAT 倒排索引 通用场景
IVF_PQ 乘积量化 内存受限场景
HNSW 图索引 高性能搜索
DISKANN 磁盘索引 大规模数据
GPU_IVF_FLAT GPU索引 GPU加速场景
GPU_IVF_PQ GPU量化索引 GPU大容量场景

2.3 混合搜索 #

text
混合搜索支持:

┌─────────────────────────────────────┐
│          查询请求                    │
├─────────────────────────────────────┤
│  向量相似度 + 标量过滤               │
│  ┌─────────┐  ┌─────────┐          │
│  │ 向量搜索 │  │ 元数据过滤│          │
│  └────┬────┘  └────┬────┘          │
│       └──────┬─────┘                │
│              ▼                      │
│       ┌─────────────┐              │
│       │  结果融合    │              │
│       └─────────────┘              │
└─────────────────────────────────────┘

2.4 云原生架构 #

text
Milvus云原生特性:

┌─────────────────────────────────────┐
│           云原生架构                 │
├─────────────────────────────────────┤
│  ✓ 容器化部署                        │
│  ✓ Kubernetes原生支持               │
│  ✓ 存储计算分离                      │
│  ✓ 弹性伸缩                          │
│  ✓ 高可用                            │
│  ✓ 多租户支持                        │
└─────────────────────────────────────┘

2.5 易用性 #

python
from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType

connections.connect("default", host="localhost", port="19530")

fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128)
]
schema = CollectionSchema(fields, "demo collection")
collection = Collection("demo", schema)

三、应用场景 #

3.1 RAG(检索增强生成) #

text
RAG架构:

┌──────────┐     ┌──────────┐     ┌──────────┐
│  用户问题 │────▶│  向量化   │────▶│  Milvus  │
└──────────┘     └──────────┘     └────┬─────┘
                                       │
                                       ▼
┌──────────┐     ┌──────────┐     ┌──────────┐
│  最终答案 │◀────│  LLM生成  │◀────│ 相关文档  │
└──────────┘     └──────────┘     └──────────┘
python
question_embedding = embed(question)
results = collection.search(
    data=[question_embedding],
    anns_field="embedding",
    param={"metric_type": "L2", "params": {"nprobe": 10}},
    limit=5
)

3.2 图像搜索 #

text
图像搜索流程:

┌──────────┐     ┌──────────┐     ┌──────────┐
│  查询图片 │────▶│ 特征提取  │────▶│  Milvus  │
└──────────┘     └──────────┘     └────┬─────┘
                                       │
                                       ▼
                                 ┌──────────┐
                                 │ 相似图片  │
                                 └──────────┘

3.3 推荐系统 #

python
user_embedding = get_user_embedding(user_id)

results = collection.search(
    data=[user_embedding],
    anns_field="item_embedding",
    param={"metric_type": "IP", "params": {"nprobe": 16}},
    limit=10,
    expr='category == "electronics"'
)

3.4 文本相似度 #

python
query_embedding = text_to_embedding("机器学习入门教程")

results = collection.search(
    data=[query_embedding],
    anns_field="text_embedding",
    param={"metric_type": "COSINE"},
    limit=10
)

3.5 视频检索 #

text
视频检索流程:

┌──────────┐     ┌──────────┐     ┌──────────┐
│  视频帧   │────▶│ 特征提取  │────▶│  Milvus  │
└──────────┘     └──────────┘     └────┬─────┘
                                       │
                                       ▼
                                 ┌──────────┐
                                 │ 相似视频  │
                                 └──────────┘

四、Milvus与其他向量数据库对比 #

4.1 Milvus vs Pinecone #

特性 Milvus Pinecone
开源
自托管
云服务 Zilliz Cloud Pinecone Cloud
索引类型 丰富 有限
混合搜索 支持 有限
成本 低(自托管) 较高

4.2 Milvus vs Weaviate #

特性 Milvus Weaviate
性能 更高 较高
索引类型 更多 较少
GraphQL 不支持 支持
模块化 一般
学习曲线 中等 较低

4.3 Milvus vs Qdrant #

特性 Milvus Qdrant
性能 更高
分布式 原生支持 支持
索引类型 更多 较少
社区 更大 较小
企业支持 Zilliz Qdrant

五、Milvus架构概览 #

5.1 整体架构 #

text
┌─────────────────────────────────────────────────────┐
│                    Milvus 架构                       │
├─────────────────────────────────────────────────────┤
│                                                     │
│  ┌─────────────────────────────────────────────┐   │
│  │              Access Layer                    │   │
│  │  ┌─────────┐  ┌─────────┐  ┌─────────┐     │   │
│  │  │  Proxy  │  │  Proxy  │  │  Proxy  │     │   │
│  │  └─────────┘  └─────────┘  └─────────┘     │   │
│  └─────────────────────────────────────────────┘   │
│                        │                           │
│  ┌─────────────────────────────────────────────┐   │
│  │             Coordinator Layer               │   │
│  │  ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐  │   │
│  │  │ Root  │ │ Query │ │ Data  │ │ Index │  │   │
│  │  │Coord  │ │ Coord │ │ Coord │ │ Coord │  │   │
│  │  └───────┘ └───────┘ └───────┘ └───────┘  │   │
│  └─────────────────────────────────────────────┘   │
│                        │                           │
│  ┌─────────────────────────────────────────────┐   │
│  │              Worker Layer                    │   │
│  │  ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐  │   │
│  │  │ Query │ │ Data  │ │ Index │ │ Query │  │   │
│  │  │ Node  │ │ Node  │ │ Node  │ │ Node  │  │   │
│  │  └───────┘ └───────┘ └───────┘ └───────┘  │   │
│  └─────────────────────────────────────────────┘   │
│                        │                           │
│  ┌─────────────────────────────────────────────┐   │
│  │              Storage Layer                   │   │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐  │   │
│  │  │ Meta Store│  │ Log Store│  │Obj Store │  │   │
│  │  └──────────┘  └──────────┘  └──────────┘  │   │
│  └─────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────┘

5.2 组件说明 #

组件 说明
Proxy 请求代理,处理客户端连接
Root Coordinator 元数据管理,DDL操作
Query Coordinator 查询调度,负载均衡
Data Coordinator 数据管理,段管理
Index Coordinator 索引构建协调
Query Node 执行查询任务
Data Node 数据写入处理
Index Node 索引构建任务

六、Milvus适用场景总结 #

6.1 适合使用Milvus的场景 #

text
✓ RAG应用(检索增强生成)
✓ 图像/视频检索
✓ 推荐系统
✓ 文本相似度搜索
✓ 音频检索
✓ 分子结构搜索
✓ 欺诈检测
✓ 异常检测

6.2 不适合使用Milvus的场景 #

text
✗ 传统OLTP事务处理
✗ 复杂SQL关联查询
✗ 精确匹配为主的场景
✗ 数据量很小的场景(< 1万向量)

七、总结 #

Milvus核心特点:

特点 说明
高性能 毫秒级搜索,支持十亿级向量
丰富索引 FLAT、IVF、HNSW、DISKANN等
混合搜索 向量+标量混合查询
云原生 Kubernetes原生支持
易用性 多语言SDK,简单API

下一步,让我们学习Milvus的安装与配置!

最后更新:2026-04-04