向量数据库:Milvus 原理与实战

向量数据库:Milvus 原理与实战
cuizhenjie向量数据库:Milvus 原理与实战
向量数据库是 RAG 系统的记忆中枢——Embedding 把文档变成向量,它负责高效存储和检索。
为什么普通数据库不够用
暴力搜索的问题
100万个向量逐一计算余弦相似度需要 2~5 秒,无法满足实时检索需求。
ANN(近似最近邻搜索)
不逐个比较,快速找到近似最优解
| 指标 | 暴力搜索 | ANN 检索 |
|---|---|---|
| 100万向量耗时 | 2~5秒 | 1~10毫秒 |
| 召回率 | 100% | 95%~99% |
| 适用数据量 | <10万 | 百万~亿级 |
ANN 以略微降低召回率为代价,换来 1000 倍以上的速度提升,在生产环境中是必选项。
主流索引算法
1. IVF(倒排文件索引)
先把向量分成若干簇,检索时只搜最近的几个簇。
2. HNSW(分层可导航小世界图)⭐ 最主流
多层图结构,从粗到细逐层搜索:
1 | Layer 2: A ──────── E ──────── G ← 粗筛,大步长 |
优点:速度快、精度高、参数少
缺点:内存占用大(比原始向量多 2~3 倍内存)
主流向量数据库对比
| 数据库 | 适用数据量 | 语言 SDK | 开源 | 适用场景 |
|---|---|---|---|---|
| Milvus | 百万~十亿级 | Java/Python/Go | ✅ | 大规模生产环境 |
| Qdrant | 百万~亿级 | Python/Rust/Go | ✅ | 高性能单机 |
| Weaviate | 百万~千万级 | Python/Go/Java | ✅ | 内置向量化 |
| Pinecone | 百万~亿级 | Python/Node.js | ❌ | 纯云托管 |
| Chroma | <百万 | Python/JS | ✅ | 原型验证 |
| pgvector | <百万 | PostgreSQL | ✅ | 已有 PG |
为什么选 Milvus
- 开源且社区活跃 - Apache 2.0,42.8k+ star
- Java SDK 完善 - 本系列代码示例首选
- 支持大规模数据 - 几万到几十亿都能应对
- 索引类型丰富 - HNSW、IVF、DISKANN 等
- 标量过滤能力强 - 支持元数据过滤
- 本地部署简单 - docker compose 即可启动
Milvus 核心概念
| Milvus 概念 | MySQL 对应 | 说明 |
|---|---|---|
| Collection | Table | 数据基本组织单位 |
| Schema | 表结构 | 定义字段名、类型、约束 |
| Field | Column | 单个字段 |
| Partition | 分区表 | 按业务维度划分数据 |
| Index | 索引 | 加速检索 |
快速上手:Docker 部署 Milvus
1 | # 下载 docker-compose 配置 |
实战:Python 操作 Milvus
1 | from pymilvus import MilvusClient, CollectionSchema, FieldSchema, DataType |
在 RAG 流程中的位置
1 | 数据准备:文本块 → 向量化 → 存入 Milvus Collection |
相关阅读:








