跳到主要内容
版本:v3.0.x

快照使用案例 Compatible with Milvus 3.0.x

在本指南中,您将找到快照的常见用例。

数据备份和恢复

快照是快速的时间点数据镜像,适用于快速回滚或测试(数天至数周)。同时,备份是独立、完整的副本,可单独存储,用于长期灾难恢复(数周至数年),并能更好地防止整体存储故障。

下表对快照和备份进行了比较。

| | 备份

|

快照

| | --- | --- | --- | |

创建备份

|

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

|

只创建元数据(以毫秒为单位)

| |

恢复

|

导入数据并重建索引

|

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

| |

性能

|

速度慢、资源稠密

|

快速、轻量级(以秒到分钟为单位)

| |

系统影响

|

I/O 和 CPU 占用率高

|

影响最小

|

创建快照通常需要几毫秒,恢复快照需要几秒到几分钟,具体取决于数据量。

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

创建快照

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

命名快照时,请使用清晰、描述性的名称,如"daily_backup_20240101""v2.1_production_release" ,避免使用通用术语,如"backup1""test" 。明智地使用快照名称,以区分不同版本、环境和阶段的快照。

下面的代码示例假定您已经有一个名为my_collection 的 Collection 。

from pymilvus import MilvusClient

client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)

# 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 用于跟踪还原进度。

还原使用复制段机制,而不是数据导入,这样效率更高,因为它可以

  • 直接从快照存储复制段文件(binlogs、deltalogs、index 文件

  • 保留字段 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"
)

使用 Spark 进行数据处理

快照可为分析工作负载提供稳定、一致的数据源,从而实现高效的离线数据处理。您可以使用 Spark 或其他大数据处理框架直接访问存储在对象存储中的快照数据,而不会影响实时 Milvus 集群。

以下代码假定您已创建了名为"analytics_snapshot_20260321" 的快照,将其存储在对象存储桶中,并获得了对象存储访问凭证。

第 1 步:获取快照元数据

在使用 Spark 访问快照数据之前,先获取快照元数据,以便在对象存储中定位数据文件。

# Get snapshot metadata
snapshot_info = client.describe_snapshot(
snapshot_name=s"analytics_snapshot_20260321",
include_collection_info=True
)

# Locate data files in S3
s3_path = f"s3a://{snapshot_info.s3_location}/binlogs/"

步骤 2:启动 Spark 会话

在对象存储中找到数据文件后,启动 Spark 会话并将数据读入数据帧。

spark = SparkSession.builder \
.appName("VectorAnalytics") \
.config("spark.hadoop.fs.s3a.access.key", "YOUR_ACCESS_KEY") \
.config("spark.hadoop.fs.s3a.secret.key", "YOUR_SECRET_KEY") \
.getOrCreate()