存储 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 Storageparquetvortex 以及lance-table 。不支持iceberg-tableMilvus 通过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更新成功并不意味着所有现有实体的回填都已完成。

翻译自DeepL

想要更快、更简单、更好用的 Milvus SaaS服务 ?

Zilliz Cloud是基于Milvus的全托管向量数据库,拥有更高性能,更易扩展,以及卓越性价比

免费试用 Zilliz Cloud
反馈

此页对您是否有帮助?