快照用例Compatible with Milvus 3.0.x
在本指南中,您将了解快照的常见用例。
数据备份与恢复
快照是数据的快速、特定时间点映像,适用于快速回滚或测试(时间跨度为数天至数周)。与此同时,备份则是独立的完整副本,单独存储以用于长期灾难恢复(时间跨度为数周至数年),并能更好地防范存储系统完全故障。
下表对比了快照和备份。
备份 |
快照 |
|
|---|---|---|
备份创建 |
复制所有数据文件(耗时) |
仅创建元数据(仅需几毫秒) |
还原 |
导入数据并重建索引 |
仅复制现有数据和索引文件 |
性能 |
速度慢且资源消耗大 |
快速且轻量级(仅需几秒到几分钟) |
对系统的影响 |
I/O 和 CPU 使用率较高 |
影响极小 |
创建快照通常只需几毫秒,而恢复快照则根据数据量不同,耗时从几秒到几分钟不等。
有关快照限制、约束及其对系统影响的更多详细信息,请参阅“快照”。
使用外部Collection进行数据处理
快照可为分析或验证工作负载提供稳定的、特定时间点的数据源。对于 Milvus 快照,请使用milvus-table 外部 Collection 格式,而非直接将快照文件作为通用 Spark 输入进行读取。 Milvus快照存储了Collection元数据、分段清单、删除日志和主键统计信息,因此Milvus需要快照元数据JSON以及milvus-table 读取器,以保留正确的Schema和删除语义。
此工作流会在快照数据上创建一个可查询的外部 Collection。主列数据仍从快照源进行引用,而刷新操作会将源 StorageV3 清单映射到目标外部分段。
步骤 1:获取快照元数据路径
从常规 Milvus Collection 中创建或选择一个快照,然后对其进行描述以获取其对象存储位置。
from pymilvus import DataType, MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
snapshot_info = client.describe_snapshot(
snapshot_name="analytics_snapshot_20260321",
collection_name="my_collection",
include_collection_info=True
)
external_source = f"s3://bucket/{snapshot_info.s3_location}"
步骤 2:创建并刷新milvus-table 外部 Collection
创建一个Schema与快照源Collection匹配的外部Collection。将external_spec.format 设置为"milvus-table" ,并将每个目标数据字段的external_field 设置为对应的源字段名称。
schema = client.create_schema(
external_source=external_source,
external_spec="""{
"format": "milvus-table",
"extfs": {
"cloud_provider": "aws",
"region": "us-west-2",
"access_key_id": "YOUR_ACCESS_KEY",
"access_key_value": "YOUR_SECRET_KEY"
}
}""",
)
schema.add_field(
field_name="id",
datatype=DataType.INT64,
is_primary=True,
external_field="id",
)
schema.add_field(
field_name="embedding",
datatype=DataType.FLOAT_VECTOR,
dim=768,
external_field="embedding",
)
client.create_collection(
collection_name="snapshot_external_collection",
schema=schema,
)
job_id = client.refresh_external_collection(
collection_name="snapshot_external_collection"
)
刷新完成后,您可以创建索引、加载外部Collection,并对基于快照的视图执行搜索或查询操作。