You need to enable JavaScript to run this app.
文档中心
向量数据库 Milvus 版

向量数据库 Milvus 版

复制全文
下载 pdf
库表管理
向量数据库 Milvus 版支持 DiskANN + RaBitQ
复制全文
下载 pdf
向量数据库 Milvus 版支持 DiskANN + RaBitQ
向量数据库 Milvus 版已支持 DiskANN + RaBitQ。DiskANN + RaBitQ 是一套全新的索引实现,并非在原生 DiskANN 上简单叠加 RaBitQ 量化。本文介绍 Milvus 中 DiskANN + RaBitQ 的实现方式、兼容性设计、参数说明及使用示例,适用于在面向大规模向量检索时,需同时兼顾成本效益与系统性能的应用场景。​
背景说明​
Milvus 当前支持两种 DiskANN 实现,通过 legacy 参数进行区分:​
  • 新版 DiskANN(推荐):legacy = false(默认)。支持 PQ 与 RaBitQ 两种量化方式,通过 quant_type 参数区分量化策略。​
  • 旧版 DiskANN:legacy = true。仅支持 PQ 量化。​
兼容性说明​
升级兼容性​
IndexMeta 机制​
在向量数据库 Milvus 版中,索引数据不仅包括由 Knowhere 序列化生成的索引文件,还包括一份 IndexMeta 元数据,存储在 ETCD 中。旧版 DiskANN 中 IndexMeta 示例:​
​​其中 ParamsJSON 和 Index.UserParams 是用户通过 SDK 传入的原始参数,Index.IndexParams 是向量数据库 Milvus 版内部处理后的最终索引参数。​
备份与恢复兼容性​
使用 milvus-backup 工具进行备份恢复时:​
  • 工具不会备份索引文件,仅备份 IndexMeta。​
  • 恢复时配合 --rebuild_index 参数,根据 IndexMeta 重新构建索引。​
​
# 创建备份​
./milvus-backup create -n test_backup​
​
# 恢复并重建索引​
./milvus-backup restore -n test_backup -s _recover --rebuild_index​
​
注意事项​
升级注意事项​
  • 由于兼容性逻辑同时存在于 Proxy 与索引节点,使用新版 DIskANN 创建新索引时,需确保 Proxy 和索引节点的版本均大于或等于 5.11.1。​
  • 已存在的旧版 DiskANN 索引在升级后不受影响。​
  • 若升级时存在未完成的旧版 DiskANN 索引构建任务,升级后将继续以旧版 DiskANN 索引完成构建。​
用户代码迁移注意事项​
DiskANN 索引​
  • 创建索引时,DiskANN 默认对应新版 DiskANN + RaBitQ。仅适用于 PQ 的旧参数将被忽略但不会报错,索引仍可成功创建。新版 DiskANN 的完整参数请参见 常用参数一览(SDK 参数名)。​
  • 其他接口无需改造。​
AUTOINDEX​
  • 创建索引时,容量型节点中索引类型 AUTOINDEX 默认对应 DiskANN + RaBitQ。默认参数如下所示。​
  • ​
    {​
    "search_list_size": "100",​
    "max_degree": "56",​
    "metric_type": "COSINE"​
    }​
    ​
  • 对于迁移前已存在 AUTOINDEX 索引类型:​
  • 若在 milvus.yaml 中配置搜索参数(如 ef_search),迁移后该配置将失效,可能影响 recall、QPS 等指标。​
  • 若未在 milvus.yaml 中修改 AUTOINDEX 配置,则使用方式保持不变。​
参数说明​
SDK 中参数使用下划线命名,例如 max_degree)。配置文件 milvus.yaml 中参数使用大驼峰命名,例如 MaxDegree。​
常用参数一览(SDK 参数名)​
​
参数类别​
适用量化​
参数名​
类型​
取值范围​
默认值​
说明​
构建​
RaBitQ/PQ​
store_strategy​
String​
  • DISK​
  • MEMORY​
MEMORY​
DiskANN 索引模式。​
构建​
RaBitQ/PQ​
quant_type​
String​
  • RABITQ​
  • PQ​
RaBitQ​
指定量化方式,当 legacy 为 true 时不生效。多数场景下建议保持默认值。​
构建​
RaBitQ/PQ​
distance_strategy​
String​
  • QUANT THEN MORE BITS​
  • FULL​
  • SINGLE QUANT​
  • QUANT THEN FULL​
​
QUANT THEN MORE BITS​
指定查询计算策略。多数场景下建议保持默认值。​
  • FULL 表示全精度搜索。​
  • SINGLE QUANT 表示量化搜索。​
  • QUANT THEN FULL 表示量化搜索 + 全精度优化。​
  • QUANT THEN MORE BITS 表示 1 bit RabitQ 搜索 + 4 bit RaBitQ 优化。​
注意​
quant_type 为 PQ 时会回退到 SINGLE QUANT 模式。​
构建​
RaBitQ/PQ​
num_threads​
Int​
[2, int_max]​
2​
索引构建并发线程数。​
构建​
RaBitQ/PQ​
legacy​
String​
  • "false"​
  • "true"​
"false"​
是否启用旧版 DiskANN。多数场景下建议保持默认值。如果您希望在火山引擎向量数据库 Milvus 版上新建索引时与开源 Milvus 保持一致,需设置为 "true"。​
构建​
RaBitQ/PQ​
max_degree​
Int​
[1, 2048]​
48​
图中每个节点的最大邻居数。​
构建​
RaBitQ/PQ​
build_dram_budget_gb​
Int​
[0, int_max]​
0​
索引允许使用的内存总量,内存不足时会采用子图构建。0 表示自适应。​
构建​
RaBitQ/PQ​
search_cache_budget_gb_ratio​
Float​
[0.0, 0.3)​
0.1​
查询缓存与原始数据大小比例。​
构建​
RaBitQ​
rabitq_centers​
Int​
[1, int_max]​
64​
RaBitQ 聚类中心数。多数场景下建议保持默认值。​
构建​
PQ​
pq_code_budget_gb_ratio​
Float​
(0.0, 0.25]​
0.125​
表示向量的总大小(GB)与分配用于存储 PQ 代码的空间之间的比率。​
构建/查询​
RaBitQ/PQ​
search_list_size​
Int​
[1, int_max]​
128​
图的候选集长度,构建和查询时 search_list_size 含义不同:​
  • 构建时:search_list_size 越大图的质量越高。​
  • 查询时:search_list_size 越大召回率越高,QPS 越低。​
查询​
RaBitQ/PQ​
beam_width_ratio​
Int​
[1, max(128/CPU number, 16)]​
4​
每次搜索迭代的最大 I/O 请求数与 CPU 核数之间的比率。​
​
milvus.yaml 配置示例​
​
DiskIndex:​
Legacy: "false"​
MaxDegree: 56​
SearchListSize: 100​
PQCodeBudgetGBRatio: 0.125​
BuildNumThreadsRatio: 1​
SearchCacheBudgetGBRatio: 0.1​
​
API 传入的参数的优先级高于配置文件的配置。如果您在 create_index 的 API 传入的参数 params 中没有设置以上字段,向量数据库 Milvus 版使用配置文件中的值来填充。配置文件是集群级生效。​
Legacy 参数设置为 false 时,默认启用新版 DiskANN。如果您希望在火山引擎向量数据库 Milvus 版上新建索引时与开源 Milvus 保持一致,需将 Legacy 设置为 true。​
索引构建示例​
​
Python
Go
Java
​
​
from pymilvus import Collection, connections​
​
# 1. 连接​
connections.connect(uri="http://localhost:19530", token="user:password")​
​
# 2. 新建 Collection 并写入数据​
# ...​
​
# 3.指定 Collection​
col = Collection("collection_name")​
​
# 4. 设置索引参数​
index_params = {​
'metric_type': 'COSINE', ​
'index_type': 'DISKANN', ​
'params': {'max_degree': 48, 'store_strategy': 'MEMORY',​
'quant_type': 'RABITQ', 'distance_strategy': 'QUANT THEN MORE BITS', 'search_list_size': 200}}​
​
# 5. 创建索引​
col.create_index(field_name="vector_field_name", index_params=index_params,​
index_name="index_nmae", timeout=None)​
​
# 6. 加载​
col.load()​
​
# 7. 查询​
vector_field = 'vector'​
expr = None​
k = 100​
search_param = {'metric_type': 'COSINE', 'params': {'search_list_size': 200, 'use_cloud_search': True}}​
query = [1,2,3]​
​
res = col.search(​
data=[query],​
anns_field=vector_field,​
param=search_param,​
limit=k,​
expr=expr,​
)​
​
​
资源计算​
您可以使用资源计算器计算所需资源。具体操作,请参见资源估算。​
最近更新时间:2026.10.30 10:29:52
这个页面对您有帮助吗?
有用
有用
无用
无用