• Über Milvus
  • Los geht's
  • Konzepte
  • Benutzerhandbuch
  • Datenimport
  • AI-Tools
  • Leitfaden für die Verwaltung
  • Werkzeuge
  • Integrationen
  • Anleitungen
  • FAQs
  • API Reference

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