Milvus简介
Milvus 是另一个专为大规模向量相似度搜索设计的开源向量数据库,和 Chroma、FAISS 属于同一类技术栈,但定位更偏向 企业级、生产级、超大规模场景。
✅ 一句话介绍 Milvus
Milvus 是一个高性能、可扩展的向量数据库,专为 AI 应用中的“向量相似性搜索”而生,支持亿级向量的毫秒级检索。
🔍 Milvus vs Chroma vs FAISS:全面对比
| 特性 | Milvus | Chroma | FAISS (cpu/gpu) |
|---|---|---|---|
| 类型 | 向量数据库(分布式) | 轻量级向量数据库 | 向量搜索库(底层引擎) |
| 是否需要独立部署 | ✅ 是(可 Docker 或集群) | ✅ 可嵌入(in-memory)或持久化 | ❌ 不需要,纯 Python 库 |
| 可扩展性 | ⚡ 极强(支持亿级向量、分布式) | 🐢 中小规模(万到百万级) | ⚠️ 单机,内存受限 |
| 易用性 | ⚠️ 中等(需配置服务) | ✅ 极高(几行代码搞定) | ⚠️ 中等(需手动管理索引) |
| 元数据过滤 | ✅ 强大(支持复杂 SQL-like 查询) | ✅ 支持简单过滤 | ❌ 原生不支持 |
| GPU 支持 | ✅ 是(可加速搜索) | ❌ 目前无 | ✅ faiss-gpu 支持 |
| 持久化 | ✅ 是(自动) | ✅ 是 | ✅ 可手动保存索引文件 |
| 高可用 & 多副本 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
| 社区 & 生态 | ✅ 活跃(LF AI & Data 基金会) | ✅ 活跃(LangChain 原生集成) | ✅ Meta 开源,广泛使用 |
| 适合场景 | 企业级 RAG、推荐系统、图像检索 | 快速原型、本地实验、小项目 | 高性能单机搜索、嵌入式 |
✅ Milvus 的核心优势
1. 超大规模支持
- 支持 十亿级向量 的高效检索
- 使用分片(sharding)、副本(replica)、索引优化(如 IVF, HNSW, DiskANN)实现高性能
2. 混合搜索(Hybrid Search)
- 不仅支持向量相似度搜索
- 还支持 向量 + 结构化元数据过滤 联合查询
Python
编辑
# 例子:找“类别=新闻”且语义匹配“天气”的文档
results = collection.query(vector=query_vector,filter="category == 'news'",limit=5
)3. 多种索引类型,灵活优化
IVF_FLAT,IVF_SQ8,HNSW,DISKANN等- 可根据数据量、精度、速度需求选择
4. 支持多种距离度量
L2(欧氏距离)IP(内积,归一化后 ≈ 余弦相似度)COSINE(新版本直接支持)
✅ Milvus 的典型架构
Text
编辑
+----------------+ +---------------------+
| AI 应用 | --> | Milvus Server |
| (Python/Java) | | (Docker/Kubernetes) |
+----------------+ +----------+----------+|v+---------------------------+| 向量索引 + 元数据 || (存储在本地或云存储如 S3) |+---------------------------+📌 你需要启动一个 Milvus 服务(通常用 Docker),然后通过 SDK 连接它。
✅ 代码示例:用 Milvus 实现 retrieve
Python
编辑
from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType
import numpy as np# 1. 连接 Milvus 服务
connections.connect(host="localhost", port="19530") # 默认端口# 2. 定义 schema
fields = [FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=384),FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=5000),
]
schema = CollectionSchema(fields, "文档检索")
collection = Collection("documents", schema)# 3. 创建索引(如 HNSW)
index_params = {"index_type": "HNSW","metric_type": "COSINE", # 直接支持余弦相似度!"params": {"M": 8, "efConstruction": 64}
}
collection.create_index("embedding", index_params)# 4. 插入数据(假设已有 embeddings 和 texts)
# collection.insert([embeddings, texts])# 5. 检索函数
def retrieve_milvus(query: str, top_k: int = 3):query_embedding = embed_chunk(query).reshape(1, -1)collection.load() # 加载到内存results = collection.search(data=query_embedding,anns_field="embedding",param={"metric_type": "COSINE", "limit": top_k},limit=top_k,output_fields=["text"])# 提取文本return [hit.entity.get("text") for hit in results[0]]# 使用
results = retrieve_milvus("今天天气怎么样")
print(results)✅ 什么时候该用 Milvus?
| 场景 | 推荐使用 Milvus? |
|---|---|
| 项目原型、本地实验 | ❌ 用 Chroma 更快 |
| 数据量 < 10 万 | ❌ 用 Chroma 或 FAISS |
| 数据量 > 100 万 | ✅ Milvus 更稳定高效 |
| 需要高可用、多副本 | ✅ Milvus 支持 |
| 需要混合查询(向量 + 条件) | ✅ Milvus 强大支持 |
| 团队有运维能力 | ✅ 可部署管理 |
| 云原生、Kubernetes 环境 | ✅ Milvus 支持 |
✅ Milvus 的部署方式
| 方式 | 说明 |
|---|---|
| Milvus Lite | 嵌入式,类似 Chroma,用于测试 |
| Docker Compose | 单机部署,适合中小规模 |
| Kubernetes (Helm) | 生产级集群部署,支持自动伸缩 |
✅ 总结:三者怎么选?
| 你的需求 | 推荐工具 |
|---|---|
| 快速验证想法、做 demo | ✅ Chroma |
| 单机高性能、嵌入式搜索 | ✅ FAISS |
| 企业级、大规模、高并发、混合查询 | ✅ Milvus |
🎯 最终建议:
- 学习阶段:用
Chroma,简单直观 - 性能优化:用
FAISS,掌握底层 - 生产上线:用
Milvus或Weaviate/Pinecone,确保稳定可扩展
🔥 你可以把它们看作“向量搜索技术栈”的不同层次:
FAISS:发动机Chroma:家用轿车(易开)Milvus:重型卡车(载重大、可集群)
如果你正在构建一个企业级 RAG 系统、推荐引擎或图像搜索引擎,Milvus 是非常值得投入学习和使用的工具!
