• 关于 Milvus
  • 开始
  • 概念
  • 用户指南
  • 数据导入
  • 人工智能工具
  • 管理指南
  • 工具
  • 集成
  • 教程
  • 常见问题
  • API Reference

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

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

数据备份和恢复

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

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

备份

快照

创建备份

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

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

恢复

导入数据并重建索引

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

性能

速度慢、资源密集型

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

系统影响

I/O 和 CPU 占用率高

影响最小

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

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

创建快照

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

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

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

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"
)
// java
import (
    "context"
    "github.com/milvus-io/milvus/client/v2/milvusclient"
)

client, err := milvusclient.New(context.Background(), &milvusclient.ClientConfig{
    Address: "localhost:19530",
    Token: "root:Milvus",
})

// Recommended: Flush data before creating snapshot to ensure all data is included
err = client.Flush(context.Background(), milvusclient.NewFlushOption("my_collection"))
if err != nil {
    log.Fatal(err)
}

// Create snapshot
createOpt := milvusclient.NewCreateSnapshotOption("backup_20240101", "my_collection").
    WithDescription("Daily backup for January 1st, 2024")

err = client.CreateSnapshot(context.Background(), createOpt)
// node.js
# restful

还原快照

您可以将快照还原到新的 Collections 中。此操作是异步的,并返回一个作业 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",
)
// java
restoreOpt := milvusclient.NewRestoreSnapshotOption(
    "backup_20240101",
    "restored_collection"
)

jobID, err := client.RestoreSnapshot(context.Background(), restoreOpt)
if err != nil {
    log.Fatal(err)
}
// node.js
# restful

删除快照

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

client.drop_snapshot(
    snapshot_name="backup_20240101"
)
// java
dropOpt := milvusclient.NewDropSnapshotOption("backup_20240101")
err := client.DropSnapshot(context.Background(), dropOpt)
// node.js
# restful

使用 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()

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

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

免费试用 Zilliz Cloud
反馈

此页对您是否有帮助?