快照使用個案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()