存储 V3Compatible with Milvus 3.0.x
概述
AI 数据集在 Collection 创建后往往会不断演变。随着模型和工作流的变化,团队可能需要添加文本、为现有实体生成新的向量字段,或者使用存储在 Milvus 之外的数据。要支持这些工作流,需要一种能够随数据集共同演变的存储模型。
Storage V3 在 Milvus 3.0 中提供了这种模型。它采用版本化存储布局,可整合随时间推移新增或重写的数据,同时应用程序仍可通过相同的 Milvus API 访问 Collections。
Storage V3 默认处于禁用状态。在执行 `common.storage.useLoonFFI ` 命令后,新的写入操作和压缩输出将使用 Storage V3。现有数据将保留在当前布局中,直到符合条件的数据被后台压缩重写为止。在此过渡期间,Milvus 可以读取两种布局。启用 Storage V3 是为了使用依赖于它的功能,而非作为一般的性能优化手段。
Storage V3 中的数据格式
Storage V3 使用清单文件来描述 Collection 数据,使其独立于底层数据格式。这使得同一存储层既能处理由 Milvus 管理的数据,也能处理仍保存在外部系统中的数据。
受管集合的文件格式
对于管理 Collections,dataNode.storage.format 会为新的Storage V3数据选择文件格式。该设置支持以下值:
| 格式 | 描述 |
|---|---|
parquet | 默认的、被广泛采用的列式文件格式,具有广泛的生态系统兼容性和成熟的工具链。Parquet 将数据组织为行组,并支持按列编码和压缩,使 Milvus 能够仅读取所需的列,并高效处理大规模顺序扫描。 |
vortex | 一种可选的下一代列式文件格式,基于可扩展、可组合的编码和丰富的统计信息构建。在 Milvus 中,Vortex 支持列投影、范围读取和随机访问读取。对于合适的工作负载,这些功能可减少不必要的数据读取。 |
更改dataNode.storage.format 参数将影响新的Storage V3写入操作。现有文件将保持当前格式,直到压缩操作重写相应的分段为止。大多数部署应保留默认的parquet 格式,除非具有代表性的基准测试表明vortex 更适合其数据和访问模式。
外部 Collections 和 支持的源格式
External Collections allow Milvus to use data stored in external files or tables. Storage V3 supports the following external source formats:
| 格式 | 类别 | 预期源 | Storage V3 支持情况 |
|---|---|---|---|
parquet | 文件格式 | 包含 Parquet 文件的目录或对象存储前缀。 | 发现这些文件,读取其元数据和行组,并将它们记录在 Storage V3 清单中。 |
vortex | 文件格式 | 包含 Vortex 文件的目录或对象存储前缀。 | 发现文件,并利用 Vortex 布局和统计信息进行投影、范围读取和随机访问读取。 |
lance-table | 表格式 | 一个 Lance 数据集目录。 | 读取数据集元数据,并将它的片段映射到 Storage V3 清单中。 |
iceberg-table | 表格式 | 一个 Iceberg 元数据 JSON 文件和快照 ID。 | 解析指定的快照,规划其数据文件,并保留位置删除元数据。不支持等值删除,必须在刷新外部Collection之前将其转换为位置删除。 |
外部数据源为只读。Storage V3 会自行创建并刷新清单,而不会修改或复制源数据。随后,Milvus 即可通过外部 Collection 对数据构建索引,并执行搜索和查询。
云存储与跨账户身份验证
下表仅描述了外部 Collection 如何访问存储在另一个云账户中的源数据,不涉及用于存储 Milvus 管理数据的对象存储。
| 云存储 | 支持的外部格式 | 外部Collection的跨账户身份验证 |
|---|---|---|
| Amazon S3 | 上述四种格式均支持。 | 指定客户拥有的 IAM 角色 ARN。Storage V3 使用 AWS STSAssumeRole 获取临时凭证,并根据需要刷新凭证。如果角色的信任策略有要求,您还可以提供外部 ID。 |
| Google Cloud Storage (GCS) | 上述四种格式均支持。 | 指定目标服务账户。Storage V3 将冒充该服务账户,使用其短效 OAuth 访问令牌访问源存储桶,并在令牌过期前进行刷新。 |
| Azure Blob Storage | parquet、vortex 以及lance-table 。不支持iceberg-table 。 | Milvus 通过milvus-tools 私有 gRPC 服务请求短效 SAS 凭据。Storage V3 使用这些 SAS 凭据访问源容器,并在凭据过期前进行更新。 |
| Azure Data Lake Storage Gen2 (ADLS Gen2) | 上述四种格式均支持。 | Milvus 通过milvus-tools 私有 gRPC 服务请求短效 SAS 凭证。Storage V3 使用这些 SAS 凭证访问源容器,且凭证会在过期前自动刷新。 |
| 阿里云对象存储服务 (OSS) | 上述四种格式均支持。 | 请指定客户拥有的 RAM 角色 ARN。Storage V3 将使用运行时的负载身份或 ECS RAM 角色来承接该角色,然后使用临时凭据访问源存储桶。 |
有关外部Collection的配置和使用说明,请参阅《创建外部Collection》。
需要 Storage V3 的功能
| 功能 | 描述 | 所需配置 |
|---|---|---|
| Vortex 文件格式 | 以 Vortex 文件格式写入新的托管 Collection 数据。 |
|
TEXT 字段 | 存储长源文本(例如段落、文档、工单或日志),而无需在 Collection Schema 中设置固定的最大长度。 | common.storage.useLoonFFI=true |
| 函数生成的向量字段 | 向现有 Collection 添加 BM25 或 MinHash 函数,以便 Milvus 基于现有的VARCHAR 字段生成新的向量字段。Milvus 会通过后台压缩异步地为现有实体补入生成的值。 | |
| 外部Collection | 无需将数据复制到受管 Collection 中,即可查询存储在 Milvus 外部的数据。当源数据发生变化时,请刷新外部 Collection。若要公开其他源字段,请参阅“修改外部 Collection Schema”。 | common.storage.useLoonFFI=true |
启用 Storage V3 之前
一旦 Milvus 将数据写入 Storage V3,则不支持降级到无法读取 Storage V3 的 Milvus 版本。后续禁用 Storage V3 不会立即转换所有现有的 Storage V3 数据,也不会恢复与旧版本的兼容性。
在启用 Storage V3 之前,请考虑以下数据行为:
- 由于
dataCoord.compaction.storageVersion.enabled默认处于启用状态,符合条件的现有数据可通过后台压缩逐步迁移至Storage V3。 - 禁用 Storage V3 会更改未来写入操作及符合条件的压缩输出所使用的目标存储版本。此操作不会同步转换所有现有的 Storage V3 数据,也不会确保版本降级的安全性。
启用 Storage V3
在 Milvus 配置中将 `common.storage.useLoonFFI ` 设置为 `true `:
common:
storage:
useLoonFFI: true
Milvus 将此设置视为可刷新设置。请通过部署环境支持的配置更新工作流应用此更改。仅编辑静态配置文件并不能保证运行中的部署已接收新值。
如果您计划将一个函数及其生成的向量字段添加到现有Collection中,还需启用现有数据回填所需的两个压缩设置:
dataCoord:
compaction:
bumpSchemaVersion:
enabled: true
storageVersion:
enabled: true
针对现有实体的函数输出是通过后台压缩异步生成的。Schema更新成功并不意味着所有现有实体的回填都已完成。