Loading...

文章背景图

milvus-io/milvus:云原生高性能向量数据库3.0

2026-09-28
0
- 字
- 分钟
|

一、官方信息

项目名称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 pymilvus
from 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 pymilvus
from 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())"

六、使用方法

  1. 默认连接地址:http://服务器IP:19530,无默认账号密码(单机版)。
  2. 用 Attu(8000 端口)可视化建 Collection、导入数据、跑向量查询。
  3. 在 RAG 框架中作为 Vector Store:LangChain 用 Milvus 类,LlamaIndex 用 MilvusVectorStore。
  4. 常用命令: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 做快照。

八、跳转链接

评论交流

文章目录