Snapshots
Snapshot(快照)是 Milvus Collection 的时间点镜像,是快速回滚、版本控制和测试的理想选择。它捕捉 Collection 在特定 Timestamp 的状态,只存储元数据与 manifest 文件,例如 Schema、Index 和向量数据文件(Binlog),以便高效存储和恢复。
Snapshot 是快速的时间点数据镜像,适用于快速回滚或测试(几天到几周)。同时,备份是单独存储的独立、完整副本,可用于长期灾难恢复(数周至数年),并能更好地防止整体存储故障。
要创建备份,请参阅 Milvus 备份。
Snapshot 架构
Milvus 采用基于 manifest 的 Snapshot 架构,可在不复制实际向量数据的情况下实现高效的时间点数据捕获、存储和恢复。该架构将元数据管理与物理数据存储分离开来,实现了引用对象存储中现有 Segment 文件的轻量级 Snapshot。
为 Collection 创建 Snapshot 时,Milvus 会收集以下内容:
- Snapshot 元数据
提供创建 Snapshot 的基本信息,包括快照名称和描述、目标 Collection ID 以及创建 Snapshot 的时间点。
- Collection 描述
它包含目标 Collection 的描述,包括其 Schema 定义、Partition 信息和属性。
- 索引信息
存储索引元数据和索引文件路径。
- Segment 数据
它捕获了向量数据文件(binlogs)、删除日志(deltalogs)和索引文件。
在上述信息中,Milvus 会为每个 Segment 生成 Apache Avro manifest 文件,并在 JSON 文件中存储快照元数据、Collection 说明、索引信息和清单文件的路径。下图展示 Snapshot 的对象存储目录结构。
snapshots/{collection_id}/
├── metadata/
│ └── {snapshot_id}.json # Snapshot metadata (JSON format)
│
└── manifests/
└── {snapshot_id}/ # Directory for each snapshot
├── {segment_id_1}.avro # Individual segment manifest (Avro format)
├── {segment_id_2}.avro
└── ...
创建 Snapshot 通常只需几毫秒,恢复 Snapshot 则需要几秒到几分钟,具体取决于数据量。
存储影响和注意事项
只要 Snapshot 仍引用某个 Segment 或索引文件,Milvus 就不会对该文件执行垃圾回收。快照消耗的存储空间与目标 Collection 的大小成正比,保留 Snapshot 会持续占用对象存储空间,并产生相应的对象存储成本。在极端情况下,单个快照甚至会使对象存储成本翻倍。建议您
- 定期删除旧快照,以节省存储空间。
- 使用描述性的名称和说明,以备将来参考。
- 始终验证快照创建和恢复结果。
- 跟踪快照创建时间戳和存储使用情况,以便进行监控和故障排除。
- 存储恢复任务 ID,以便进行监控和故障排除。
限制和约束
- Snapshot 在创建后不可更改。
- 你只能将 Snapshot 恢复到与原始 Collection 在同一集群中的新 Collection。
- 恢复后的 Collection 保留原有 Schema、Shard 数和 Partition 数。
- 恢复的历史数据可能与 TTL 策略冲突。建议在创建 Snapshot 前禁用 TTL 或调整 TTL 设置。
- 要将 Snapshot 作为
milvus-table外部源使用,源 Snapshot 必须来自普通的 StorageV3 Milvus Collection。不支持将外部 Collection 的 Snapshot 作为milvus-table源。
更多信息
- 管理 Snapshot:创建、列出、查看详情、固定、还原和删除 Snapshot。
- Snapshot 用例:常用模式和工作流程。
- Milvus Backup:跨集群的长期备份和还原。