【Milvus合集】1.Milvus 的核心概念(collection、field、index、partition、segment)

一、.Milvus 的核心概念

Milvus 是一款专门为高性能向量检索任务设计的数据库系统。它的核心概念主要包括:


🌟 1. Collection(集合)

类比关系型数据库中的表(Table),一个 Collection 就是一组结构化向量数据的容器。

  • 每个 Collection 都有一套完整的 schema(字段定义)

  • 每个 Collection 通常代表一个向量检索的主题,比如 "商品图像库" 或 "文档向量库"

✅ 示例:

python 复制代码
collection_name = "book_collection"

📌 2. Field(字段)

每个 Collection 由若干个字段构成,字段可以是以下几种类型:

字段类型 说明 示例
Int64 主键字段(必须有一个) book_id = 123
FloatVector 向量字段(必须有一个) [0.23, 0.98, ..., 0.67]
Float, Bool, VarChar 附加属性字段(可选) price = 89.9, title="AI入门"

✅ 示例:

python 复制代码
from pymilvus import FieldSchema, DataType

fields = [
    FieldSchema(name="book_id", dtype=DataType.INT64, is_primary=True, auto_id=False),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=768),
    FieldSchema(name="title", dtype=DataType.VARCHAR, max_length=100)
]

🧠 3. Index(索引)

Milvus 为了提升向量检索性能,需要在向量字段上建立 ANN 索引(近似最近邻)。

常见索引类型:

索引类型 场景 特点
FLAT 精确检索 最慢,耗内存
IVF_FLAT 倒排列表 + 精确子搜索 较快,适中
HNSW 小数据量,图搜索结构 快,但内存占用高
DISKANN 海量数据场景 支持磁盘索引,适合大规模

✅ 示例:

python 复制代码
from pymilvus import FieldSchema, DataType

fields = [
    FieldSchema(name="book_id", dtype=DataType.INT64, is_primary=True, auto_id=False),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=768),
    FieldSchema(name="title", dtype=DataType.VARCHAR, max_length=100)
]

📂 4. Partition(分区)

一个 Collection 可以按某个字段的取值进行逻辑上的划分,提高查询效率或做数据隔离

  • 常见用途:按用户、时间、类别进行分区

  • 在查询时可以指定分区进行检索,跳过无关数据,加快响应

✅ 示例:

python 复制代码
collection.create_partition("partition_2025")
collection.load(partition_names=["partition_2025"])

🧩 5. Segment(段)

Milvus 内部的数据物理存储单位(你不需要直接操作它)

  • 系统会自动将数据拆分成 Segment,每个 Segment 的大小受限(一般为 512MB)

  • 在查询和删除数据时,Milvus 会按 Segment 级别加载或合并

  • 与"列式存储"系统中的块(Block)类似

📌 通常你只需了解 Segment 的存在,用于理解性能调优或数据刷新机制(compaction)。


🔄 总结类比表

Milvus 概念 类比于传统数据库 用途
Collection Table 存放同类型的向量数据
Field Column 描述每条数据的内容
Index 索引 提高查询速度
Partition 分区 逻辑隔离 / 加速查询
Segment 数据块(隐藏) 系统自动分片管理

二、Partition 与 Index 参数对查询性能的影响

✅ 1. Partition 对性能的影响

Milvus 的 Partition(分区)是对 Collection 逻辑上的划分 ,它能在 查询阶段显著减少检索范围

✨ 性能优势:

  • 过滤加速:查询时如果只检索某个分区,而不是整个 Collection,Milvus 只加载该分区对应的 segment。

  • 内存节省:未使用的分区不会被 load 到内存,节省资源。

  • 隔离性好:分区适合多租户、用户隔离、按时间切片检索等场景。


✅ 2. Index 参数对性能的影响

Index(索引)决定了 Milvus 在做 ANN 检索时的方式,不同索引适用于不同数据量级与精度需求:

索引类型 优点 适用场景 相关参数
FLAT 精确检索,慢 小数据量测试
IVF_FLAT 平衡速度与精度 百万级向量 nlist
HNSW 查询快,适中精度 小型系统 M, efConstruction, ef
DISKANN 支持磁盘索引,节省内存 十亿级数据场景 search_list_size, pq_code_budget_mb, etc

👉 参数意义(以 IVF_FLAT 为例):

  • nlist: 将所有向量划分成多少个簇(越大精度越高,但索引越大)

  • 查询时的 nprobe: 在检索时查询几个簇(越多越精确,但慢)

三、Partition 的详细使用案例

我们以一个图书向量库为例,按图书的语言来划分分区。

📝 场景背景:

你有一本书的标题向量化数据,字段如下:

  • book_id: Int64

  • embedding: FloatVector(768维)

  • language: VarChar(语言,如 "Chinese", "English", "French")

你想按语言划分 Partition,以提高查询效率。


🧱 Step 1: 定义 Collection 与分区

python 复制代码
from pymilvus import CollectionSchema, FieldSchema, DataType, Collection, connections

connections.connect()

# 定义字段
fields = [
    FieldSchema(name="book_id", dtype=DataType.INT64, is_primary=True, auto_id=False),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=768),
    FieldSchema(name="language", dtype=DataType.VARCHAR, max_length=20)
]

schema = CollectionSchema(fields=fields, description="Book vector database")

collection = Collection(name="book_collection", schema=schema)

# 创建分区
collection.create_partition("chinese_books")
collection.create_partition("english_books")

🧪 Step 2: 插入数据到对应分区

python 复制代码
# 插入中文图书数据
collection.insert([
    [1, 2],   # book_id
    [[...], [...]],  # embedding 向量
    ["Chinese", "Chinese"]  # language
], partition_name="chinese_books")

# 插入英文图书数据
collection.insert([
    [3], [[...]], ["English"]
], partition_name="english_books")

🔍 Step 3: 查询时指定分区,提高效率

python 复制代码
collection.load(partition_names=["english_books"])  # 只加载英文书分区

search_params = {
    "metric_type": "L2",
    "params": {"nprobe": 10}
}

results = collection.search(
    data=[[...]],  # 查询向量
    anns_field="embedding",
    param=search_params,
    limit=5,
    output_fields=["book_id", "language"],
    partition_names=["english_books"]  # 👈 仅检索该分区
)

📌 性能提升点

  • 只加载一个分区的 segment,加载更快,占用内存少;

  • 查询范围缩小,ANN 检索速度显著加快;

  • 数据隔离,避免误检。

相关推荐
A先生的AI之旅5 分钟前
2026-1-30 LingBot-VA解读
人工智能·pytorch·python·深度学习·神经网络
Learn Beyond Limits5 分钟前
文献阅读:A Probabilistic U-Net for Segmentation of Ambiguous Images
论文阅读·人工智能·深度学习·算法·机器学习·计算机视觉·ai
丝瓜蛋汤5 分钟前
微调生成特定写作风格助手
人工智能·python
OpenMiniServer20 分钟前
电气化能源革命下的社会
java·人工智能·能源
猿小羽25 分钟前
探索 Codex:AI 编程助手的未来潜力
人工智能·openai·代码生成·codex·ai编程助手
菜青虫嘟嘟29 分钟前
Expert Iteration:一种无需人工标注即可显著提升大语言模型推理能力的简单方法核心
人工智能·语言模型·自然语言处理
玄同76535 分钟前
LangChain v1.0+ Retrieval模块完全指南:从文档加载到RAG实战
人工智能·langchain·知识图谱·embedding·知识库·向量数据库·rag
deepdata_cn41 分钟前
为什么AI需要因果?
人工智能·因果学习
说私域1 小时前
社群招募文案的核心构建要点与工具赋能路径——基于AI智能名片链动2+1模式商城小程序的实践研究
人工智能·小程序·私域运营
LaughingZhu1 小时前
Product Hunt 每日热榜 | 2026-01-31
大数据·人工智能·经验分享·搜索引擎·产品运营