Storage V3
Overview
AI 数据集通常会在 Collection 创建后继续演进。随着模型和工作流变化,团队可能需要添加文本、为现有 Entity 生成新的向量字段,或使用存储在 Milvus 之外的数据。要支持这些工作流,需要一种能够随数据集演进的存储模型。
Storage V3 在 Milvus 3.0 中提供了这种模型。它使用带版本的存储布局来纳入随时间添加或重写的数据,同时应用仍可通过相同的 Milvus API 访问 Collection。
Storage V3 默认关闭。common.storage.useLoonFFI 生效后,新的写入和 Compaction 输出会使用 Storage V3。现有数据会保持当前布局,直到符合条件的数据被后台 Compaction 重写。在此过渡期间,Milvus 可以读取两种布局。启用 Storage V3 是为了使用依赖它的功能,而不是将其作为通用性能优化手段。
Features that require Storage V3
| 功能 | 说明 | 必需配置 |
|---|---|---|
TEXT field | 存储较长的源文本,例如段落、文档、工单或日志,无需在 Collection Schema 中设置固定的最大长度。 | common.storage.useLoonFFI=true |
| Function-generated vector fields | 向现有 Collection 添加 BM25 或 MinHash Function,使 Milvus 基于现有 VARCHAR 字段生成新的 vector field。Milvus 会通过后台 Compaction 异步为现有 Entity 回填生成值。 | |
| External Collection | 查询存储在 Milvus 外部的数据,无需将其复制到托管 Collection 中。源数据变化后,需要刷新 External Collection。若要公开更多源字段,请参阅 Alter External Collection Schema。 | common.storage.useLoonFFI=true |
Before you enable Storage V3
一旦 Milvus 以 Storage V3 写入数据,就不支持降级到无法读取 Storage V3 的 Milvus 版本。后续禁用 Storage V3 不会立即转换所有已有的 Storage V3 数据,也不会恢复与旧版本的兼容性。
启用 Storage V3 前,请注意以下数据行为:
- 由于
dataCoord.compaction.storageVersion.enabled默认启用,符合条件的已有数据可以通过后台 Compaction 逐步转换为 Storage V3。 - 禁用 Storage V3 会改变未来写入和符合条件的 Compaction 输出的目标存储版本。它不会同步转换所有已有的 Storage V3 数据,也不能保证安全降级版本。
Enable Storage V3
在 Milvus 配置中将 common.storage.useLoonFFI 设置为 true:
common:
storage:
useLoonFFI: true
Milvus 会将此配置视为可刷新配置。请通过你的部署方式支持的配置更新工作流应用此变更。仅编辑静态配置文件并不能保证正在运行的部署已收到新值。
如果你计划向现有 Collection 添加 Function 及其生成的 vector field,还需要启用现有数据 backfill 所需的两个 compaction 配置:
dataCoord:
compaction:
bumpSchemaVersion:
enabled: true
storageVersion:
enabled: true
现有 Entity 的 Function 输出会通过后台 compaction 异步生成。Schema 更新成功并不表示每个现有 Entity 的 backfill 都已完成。