一、官方信息
| 项目名称 | Milvus |
| 仓库地址 | https://github.com/milvus-io/milvus |
| 官方网站 | https://milvus.io/ |
| 最新更新 | 2026 年(Milvus 3.0)持续迭代 |
| 项目定位 | 云原生、分布式、十亿级向量相似度搜索引擎 |
| 开源协议 | Apache-2.0 |
二、项目背景
随着大模型与多模态应用爆发,"向量"成了一类核心数据——文本 embedding、图片特征、音频指纹都需要存储和检索。传统关系数据库并不擅长十亿级、高维向量的相似度近邻搜索(ANN),而自己手写 HNSW / IVF 索引又要处理数据分片、持久化、容错等一堆工程问题。
Milvus 由 Zilliz(智源)团队开源,是目前 GitHub 上 star 数最高的向量数据库之一,CNCF 毕业项目。它采用存算分离的云原生架构:计算节点(Query / Data / Index Node)无状态可水平扩展,元数据和日志依赖 etcd / MinIO / Pulsar(或轻量版 RocksDB / Local Storage)。Milvus 3.0 进一步引入了 "Attu" 可视化、多向量 / 多模态混合检索、GPU 索引加速等能力,广泛用于推荐系统、RAG、图像搜索、分子筛选等场景。
对个人和小团队,Milvus 提供了 Milvus Standalone(单机版,一个 compose 文件起全套)和更轻量的 Milvus Lite(嵌入式 pip 包);对生产环境则有分布式集群版。本指南重点覆盖单机 Docker Compose 部署,这也是"若琳部署"系列最常用的方式。
三、核心特性
- 十亿级向量扩展:存算分离架构,计算节点可按需水平扩缩容。
- 丰富索引类型:HNSW、IVF_FLAT、IVF_PQ、DiskANN、GPU_CAGRA 等十余种索引。
- 混合检索:标量过滤 + 向量相似度 + 全文 / 稀疏向量联合排序(Hybrid Search)。
- 多租户:支持 database / collection 多级隔离,适合 SaaS。
- 生态完善:官方 SDK 覆盖 Python / Java / Go / Node.js,原生对接 LangChain、LlamaIndex。
- 可视化管理:配套 Attu 图形界面,可浏览数据、执行查询、监控集群。
- Milvus Lite:pip 即可嵌入 Python 进程,适合原型开发与测试。
四、环境要求
- 操作系统:Ubuntu 20.04/22.04、CentOS 7+、macOS 12+。
- Docker 20.10+ 与 Docker Compose v2。
- 硬件:单机版建议 4 核 8GB 内存、10GB 磁盘;向量量大时按需加内存与 SSD。
- 端口:默认 19530(gRPC)、9091(指标);Attu 另占 8000。
五、详细部署步骤
方式一:Milvus Standalone(Docker Compose,推荐)
下载官方 compose 文件:
cd /opt
wget https://github.com/milvus-io/milvus/releases/download/v2.4.0/milvus-standalone-docker-compose.yml -O docker-compose.yml直接启动:
sudo docker compose up -d启动后会拉起 4 个容器:
milvus-standalone:主服务,暴露 19530。etcd:存储元数据。minio:存储向量与索引文件。pulsar:消息队列(轻量 standalone 版也可使用 RocksDB 替代)。
查看状态:
sudo docker compose ps
# 健康检查
curl http://localhost:9091/healthz方式二:Milvus Lite(嵌入式,开发测试)
pip install -U pymilvusfrom pymilvus import MilvusClient
# 直接本地文件模式,无需起任何服务
client = MilvusClient("./milvus_demo.db")
client.create_collection(
collection_name="demo",
dimension=128,
)
data = [{"id": i, "vector": [0.1] * 128, "text": f"item {i}"} for i in range(100)]
client.insert(collection_name="demo", data=data)
res = client.search(collection_name="demo", data=[[0.1]*128], limit=3)
print(res)方式三:安装 Attu 可视化界面
docker run -d --name attu \
-p 8000:3000 \
-e MILVUS_URL=host.docker.internal:19530 \
zilliz/attu:latest浏览器访问 http://服务器IP:8000,Milvus Address 填 host.docker.internal:19530(或宿主机内网 IP)即可登录,无需账号密码。
方式四:Python SDK 连接与建集合
pip install pymilvusfrom pymilvus import connections, utility, Collection, CollectionSchema, FieldSchema, DataType
connections.connect(host="127.0.0.1", port="19530")
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=768),
FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=512),
]
schema = CollectionSchema(fields, description="RAG 文档块")
col = Collection("rag_chunks", schema)
# 创建 HNSW 索引
index_params = {
"index_type": "HNSW",
"metric_type": "COSINE",
"params": {"M": 16, "efConstruction": 200},
}
col.create_index("vector", index_params)
col.load()验证部署
python -c "from pymilvus import connections; connections.connect(host='127.0.0.1', port='19530'); print(connections.get_connection().list_collections())"六、使用方法
- 默认连接地址:
http://服务器IP:19530,无默认账号密码(单机版)。 - 用 Attu(8000 端口)可视化建 Collection、导入数据、跑向量查询。
- 在 RAG 框架中作为 Vector Store:LangChain 用
Milvus类,LlamaIndex 用MilvusVectorStore。 - 常用命令:
docker compose down停止,docker compose up -d启动,数据持久化在当前目录volumes/。
七、常见问题 FAQ
Q1:容器启动后一直 unhealthy?
A:多半是内存不足。Standalone 建议至少 8GB 内存;虚拟机里跑不动可改用 Milvus Lite。也可用 docker logs milvus-standalone 看具体报错。
Q2:19530 端口连不上?
A:检查防火墙 / 安全组;Docker Desktop on Mac/Windows 用 host.docker.internal,Linux 用宿主机内网 IP。
Q3:数据存在哪里?会不会丢?
A:compose 目录下的 volumes/(etcd、minio、milvus)做了持久化映射,删容器不丢数据;删除 volumes 才会清库。
Q4:选 HNSW 还是 IVF_FLAT?
A:数据量百万级以内、追求低延迟选 HNSW;千万级以上、内存敏感选 IVF_FLAT / IVF_PQ;超大数据量上 DiskANN。
Q5:如何备份?
A:直接打包 volumes/ 目录即可;生产环境推荐用 Milvus BackUp 工具或对 MinIO 做快照。
八、跳转链接
- GitHub 仓库:https://github.com/milvus-io/milvus
- 官方文档:https://milvus.io/docs
- Standalone Compose:docker-compose.yml
- Attu 可视化:https://github.com/zilliztech/attu
- PyMilvus:https://pypi.org/project/pymilvus/