跳到主要内容
版本:Cloud 开发指南

快照使用场景
内测版

本指南介绍快照的常见使用场景。

数据备份和恢复

快照是数据在特定时间点的快速镜像,适合用于快速回滚或测试(数天到数周)。相比之下,备份是单独存储的独立完整副本,适合用于长期灾难恢复(数周到数年),并能更好地防范整个存储系统故障。

下表对比了快照和备份。

备份

快照

创建方式

复制所有数据文件(耗时较长)

仅创建元数据(毫秒级)

恢复方式

导入数据并重建索引

仅复制已有数据文件和索引文件

性能

较慢且资源消耗较高

快速且轻量(数秒到数分钟)

系统影响

I/O 和 CPU 使用率较高

影响极小

创建快照通常只需毫秒级时间;恢复快照所需时间取决于数据量,通常为数秒到数分钟。

有关快照限制、约束及其系统影响的更多详细信息,请参阅快照

创建快照

创建快照前,建议您停止向目标 Collection 写入数据,并调用 flush(),以避免可能的数据丢失。

调用 flush() 并非强制要求,但强烈建议执行,以避免数据丢失。如果跳过此步骤,快照只会包含已 Flush 的数据。

为快照命名时,请使用清晰且有描述性的名称,例如 "daily_backup_20240101""v2.1_production_release",避免使用 "backup1""test" 等通用名称。合理使用快照名称,以区分不同版本、环境和阶段的快照。

以下代码示例假设您已有一个名为 my_collection 的 Collection。

from pymilvus import MilvusClient

client = MilvusClient(
uri="https://{cluster-id}.{region}.vectordb.zilliz.com.cn:19530",
token="YOUR_CLUSTER_TOKEN"
)

# Recommended: Flush data before creating snapshot to ensure all data is included
client.flush(collection_name="my_collection")

# Create snapshot for entire collection
client.create_snapshot(
collection_name="my_collection",
snapshot_name="backup_20240101",
description="Daily backup for January 1st, 2024"
)

恢复快照

您可以将快照恢复到新的 Collection。该操作为异步操作,并会返回一个任务 ID,用于跟踪恢复进度。

恢复过程使用 Copy-segment 机制,而不是数据导入,因此效率更高,原因如下:

  • 直接从快照存储中复制 Segment 文件(Binlog、Deltalog 和索引文件);

  • 保留 Field ID 和索引 ID,确保与现有数据文件兼容;

  • 避免数据重写和索引重建,从而显著缩短恢复时间;

  • 与传统备份和恢复方法相比,可实现 10 到 100 倍的性能提升。

要恢复快照,请按如下方式操作:

# Restore snapshot to new collection
job_id = client.restore_snapshot(
snapshot_name="backup_20240101",
collection_name="restored_collection",
)

删除快照

如果不再需要某个快照,您可以将其删除。建议您定期删除旧快照以节省存储空间。

client.drop_snapshot(
snapshot_name="backup_20240101"
)