Verwalten von SnapshotsCompatible with Milvus 3.0.x
In dieser Anleitung erfahren Sie, wie Sie Snapshots erstellen und verwalten können.
Snapshot erstellen
Bevor Sie einen Snapshot erstellen, sollten Sie das Schreiben von Daten in die Zielsammlung beenden und flush() aufrufen, um einen möglichen Datenverlust zu vermeiden.
Der Aufruf von flush() ist nicht zwingend erforderlich, wird aber dringend empfohlen, um Datenverluste zu vermeiden. Wenn Sie dies nicht tun, enthält der Snapshot nur die Daten, die bereits geleert wurden.
Verwenden Sie bei der Benennung eines Snapshots eindeutige, beschreibende Namen wie "daily_backup_20240101" oder "v2.1_production_release" und vermeiden Sie allgemeine Begriffe wie "backup1" und "test". Verwenden Sie Snapshot-Namen mit Bedacht, um Snapshots über Versionen, Umgebungen und Stufen hinweg zu unterscheiden.
In den folgenden Codebeispielen wird davon ausgegangen, dass Sie bereits eine Sammlung mit dem Namen my_collection haben.
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
Snapshots auflisten
Sie können die Namen der vorhandenen Snapshots auflisten.
# List all snapshots for a collection
snapshots = client.list_snapshots(
collection_name="my_collection"
)
// java
// List snapshots for collection
listOpt := milvusclient.NewListSnapshotsOption().
WithCollectionName("my_collection")
snapshots, err := client.ListSnapshots(context.Background(), listOpt)
// node.js
# bash
Snapshot beschreiben
Sie können detaillierte Informationen über einen bestimmten Snapshot abrufen.
snapshot_info = client.describe_snapshot(
snapshot_name="backup_20240101",
include_collection_info=True
)
print(f"Snapshot ID: {snapshot_info.id}")
print(f"Collection: {snapshot_info.collection_name}")
print(f"Created: {snapshot_info.create_ts}")
print(f"Description: {snapshot_info.description}")
// java
describeOpt := milvusclient.NewDescribeSnapshotOption("backup_20240101")
resp, err := client.DescribeSnapshot(context.Background(), describeOpt)
fmt.Printf("Snapshot ID: %d\n", resp.GetSnapshotInfo().GetId())
fmt.Printf("Collection: %s\n", resp.GetSnapshotInfo().GetCollectionName())
// node.js
# restful
Snapshot wiederherstellen
Sie können einen Snapshot in einer neuen Sammlung wiederherstellen. Dieser Vorgang ist asynchron und gibt eine Job-ID zurück, mit der der Fortschritt der Wiederherstellung verfolgt werden kann.
Bei der Wiederherstellung wird anstelle des Datenimports ein Kopiersegmentmechanismus verwendet, der effizienter ist, weil er
Segmentdateien (Binlogs, Deltalogs, Indexdateien) direkt aus dem Schnappschussspeicher kopiert
Feld-IDs und Index-IDs werden beibehalten, um die Kompatibilität mit bestehenden Datendateien zu gewährleisten
das Neuschreiben von Daten und den Neuaufbau von Indizes vermeidet, was zu deutlich schnelleren Wiederherstellungszeiten führt, und
gewährleistet eine 10- bis 100-fache Leistungssteigerung im Vergleich zu herkömmlichen Sicherungs- und Wiederherstellungsmethoden
Um einen Snapshot wiederherzustellen, gehen Sie wie folgt vor:
# 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
Einzelheiten zur Überwachung des Fortschritts eines Wiederherstellungsauftrags finden Sie unter Überwachung des Wiederherstellungsfortschritts.
Snapshot verwerfen
Sie können einen Snapshot löschen, wenn er nicht mehr benötigt wird. Es wird empfohlen, alte Snapshots regelmäßig zu löschen, um Speicherplatz zu sparen.
client.drop_snapshot(
snapshot_name="backup_20240101"
)
// java
dropOpt := milvusclient.NewDropSnapshotOption("backup_20240101")
err := client.DropSnapshot(context.Background(), dropOpt)
// node.js
# restful
Wiederherstellungsaufträge auflisten
Mit dieser API können Sie eine Liste der Snapshots abrufen, die bereits für die Zielsammlung erstellt wurden.
# List all restore jobs
jobs = client.list_restore_snapshot_jobs()
for job in jobs:
print(f"Job {job.job_id}: {job.snapshot_name} -> Collection {job.collection_id}")
print(f" State: {job.state}, Progress: {job.progress}%")
# List restore jobs for a specific collection
jobs = client.list_restore_snapshot_jobs(collection_name="my_collection")
// java
// List all restore jobs
listOpt := milvusclient.NewListRestoreSnapshotJobsOption()
jobs, err := client.ListRestoreSnapshotJobs(context.Background(), listOpt)
if err != nil {
log.Fatal(err)
}
for _, job := range jobs {
fmt.Printf("Job %d: %s -> Collection %d\n",
job.GetJobId(), job.GetSnapshotName(), job.GetCollectionId())
fmt.Printf(" State: %s, Progress: %d%%\n",
job.GetState(), job.GetProgress())
}
// List restore jobs for a specific collection
listOpt = milvusclient.NewListRestoreSnapshotJobsOption().
WithCollectionName("my_collection")
jobs, err = client.ListRestoreSnapshotJobs(context.Background(), listOpt)
// node.js
# restful
Wiederherstellungsstatus abrufen
Sobald Sie die ID eines Wiederherstellungsauftrags haben, können Sie diese verwenden, um den Fortschritt der Wiederherstellung abzufragen.
state = client.get_restore_snapshot_state(job_id=12345)
print(f"Job ID: {state.job_id}")
print(f"Snapshot Name: {state.snapshot_name}")
print(f"Collection ID: {state.collection_id}")
print(f"State: {state.state}")
print(f"Progress: {state.progress}%")
if state.state == "RestoreSnapshotFailed":
print(f"Failure Reason: {state.reason}")
print(f"Time Cost: {state.time_cost}ms")
// java
stateOpt := milvusclient.NewGetRestoreSnapshotStateOption(12345)
state, err := client.GetRestoreSnapshotState(context.Background(), stateOpt)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Job ID: %d\n", state.GetJobId())
fmt.Printf("Snapshot Name: %s\n", state.GetSnapshotName())
fmt.Printf("Collection ID: %d\n", state.GetCollectionId())
fmt.Printf("State: %s\n", state.GetState())
fmt.Printf("Progress: %d%%\n", state.GetProgress())
if state.GetState() == milvuspb.RestoreSnapshotState_RestoreSnapshotFailed {
fmt.Printf("Failure Reason: %s\n", state.GetReason())
}
fmt.Printf("Time Cost: %dms\n", state.GetTimeCost())
// node.js
# restful