• 關於 Milvus
  • 開始使用
  • 概念
  • 使用者指南
  • 資料匯入
  • AI 工具
  • 管理指南
  • 工具
  • 整合
  • 教學
  • 常見問題
  • API Reference

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

在本指南中,您將發現快照的常見使用案例。

資料備份和還原

快照是資料的快速時間點影像,適用於快速回溯或測試 (數天至數週)。同時,備份是獨立、完整的複本,可分開儲存,用於長期災難復原 (數週至數年),並可在儲存完全失敗時提供更好的保護。

下表為快照與備份的比較。

備份

快照

建立備份

複製所有資料檔案(耗時)

僅建立元資料(以毫秒為單位)

還原

匯入資料和重建索引

僅複製現有資料和索引檔案

效能

緩慢且資源密集

快速且輕量(以秒到分鐘為單位)

系統影響

I/O 和 CPU 使用率高

影響最小

建立快照通常需要幾毫秒,還原快照需要幾秒到幾分鐘,視資料量而定。

如需有關快照限制、限制及其系統影響的詳細資訊,請參閱快照

建立快照

在建立快照之前,建議您停止寫入資料到目標集合,並呼叫flush() 以避免可能的資料遺失。

命名快照時,請使用清楚、具描述性的名稱,例如"daily_backup_20240101""v2.1_production_release" ,並避免使用一般用語,例如"backup1""test" 。明智地使用快照名稱,以區別不同版本、環境和階段的快照。

以下的程式範例假設您已經有一個命名為my_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"
)
// 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

還原快照

您可以還原快照到新的集合。此操作是異步的,並會回傳一個工作 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

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?