Anwendungsfälle für SnapshotsCompatible with Milvus 3.0.x
In diesem Leitfaden finden Sie allgemeine Anwendungsfälle für Snapshots.
Datensicherung und -wiederherstellung
Snapshots sind schnelle, zeitpunktgenaue Abbilder von Daten, die sich für schnelle Rollbacks oder Tests (Tage bis Wochen) eignen. Gleichzeitig sind Backups unabhängige, vollständige Kopien, die für die langfristige Wiederherstellung im Notfall (Wochen bis Jahre) und zum besseren Schutz vor einem totalen Speicherausfall separat gespeichert werden.
In der folgenden Tabelle werden Snapshots und Backups miteinander verglichen.
Sicherung |
Snapshot |
|
|---|---|---|
Erstellung eines Backups |
Kopiert alle Datendateien (zeitaufwändig) |
Erzeugt nur Metadaten (in Millisekunden) |
Wiederherstellung |
Importiert Daten und baut Indizes neu auf |
Kopiert nur vorhandene Daten und Indexdateien |
Leistung |
Langsam und ressourcenintensiv |
Schnell und leichtgewichtig (in Sekunden bis Minuten) |
Auswirkungen auf das System |
Hohe E/A- und CPU-Auslastung |
Minimale Auswirkung |
Das Erstellen eines Snapshots dauert in der Regel Millisekunden, und das Wiederherstellen dauert je nach Datenvolumen Sekunden bis Minuten.
Weitere Details zu Snapshot-Grenzen, Einschränkungen und deren Auswirkungen auf das System finden Sie unter Snapshots.
Erstellen von Snapshots
Bevor Sie einen Snapshot erstellen, sollten Sie das Schreiben von Daten in die Zielsammlung beenden und flush() aufrufen, um möglichen Datenverlust zu vermeiden.
Verwenden Sie bei der Benennung eines Snapshots eindeutige, beschreibende Namen wie "daily_backup_20240101" oder "v2.1_production_release" und vermeiden Sie generische 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 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
Snapshots löschen
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
Datenverarbeitung mit Spark
Snapshots ermöglichen eine effiziente Offline-Datenverarbeitung, indem sie stabile, konsistente Datenquellen für analytische Workloads bereitstellen. Sie können mit Spark oder anderen Big-Data-Verarbeitungsframeworks direkt auf Snapshot-Daten zugreifen, die in einem Objektspeicher gespeichert sind, ohne dass dies Auswirkungen auf den Live-Milvus-Cluster hat.
Der folgende Code geht davon aus, dass Sie einen Snapshot mit dem Namen "analytics_snapshot_20260321" erstellt, in einem Objektspeicher-Bucket gespeichert und die Zugangsdaten für den Objektspeicher erhalten haben.
Schritt 1: Abrufen von Snapshot-Metadaten
Bevor Sie Spark für den Zugriff auf Snapshot-Daten verwenden, müssen Sie Snapshot-Metadaten abrufen, um die Datendateien im Objektspeicher zu finden.
# 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/"
Schritt 2: Initiieren einer Spark-Sitzung
Wenn sich die Datendateien im Objektspeicher befinden, initiieren Sie eine Spark-Sitzung und lesen die Daten in einen Datenrahmen.
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()