Casi d'uso delle istantaneeCompatible with Milvus 3.0.x
In questa guida sono descritti i casi d'uso più comuni delle snapshot.
Backup e ripristino dei dati
Le istantanee sono immagini rapide e puntuali dei dati, adatte per rollback o test veloci (da giorni a settimane). Allo stesso tempo, i backup sono copie complete e indipendenti, conservate separatamente per il ripristino di emergenza a lungo termine (da settimane a anni) e per una migliore protezione contro i guasti totali dello storage.
La tabella seguente mette a confronto le istantanee e i backup.
Backup |
Istantanea |
|
|---|---|---|
Creazione del backup |
Copia tutti i file di dati (richiede molto tempo). |
Crea solo i metadati (in millisecondi) |
Ripristino |
Importa i dati e ricostruisce gli indici |
Copia solo i file di dati e indici esistenti |
Prestazioni |
Lento e ad alta intensità di risorse |
Veloce e leggero (in pochi secondi o minuti) |
Impatto sul sistema |
Elevato utilizzo di I/O e CPU |
Impatto minimo |
La creazione di un'istantanea richiede in genere millisecondi, mentre il suo ripristino richiede da secondi a minuti, a seconda del volume di dati.
Per ulteriori dettagli sui limiti e le restrizioni delle istantanee e sul loro impatto sul sistema, consultare la sezione Istantanee.
Creare le istantanee
Prima di creare un'istantanea, si consiglia di interrompere la scrittura dei dati nella raccolta di destinazione e di chiamare flush() per evitare una possibile perdita di dati.
Quando si assegna un nome a un'istantanea, utilizzare nomi chiari e descrittivi, come "daily_backup_20240101" o "v2.1_production_release" ed evitare termini generici, come "backup1" e "test". Usate saggiamente i nomi delle istantanee per distinguere le istantanee tra le varie versioni, ambienti e fasi.
Gli esempi di codice che seguono presuppongono che si abbia già un insieme chiamato 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
Ripristinare le istantanee
È possibile ripristinare un'istantanea in una nuova raccolta. Questa operazione è asincrona e restituisce un ID di lavoro per tracciare l'avanzamento del ripristino.
Il ripristino utilizza un meccanismo di copia dei segmenti al posto dell'importazione dei dati, che è più efficiente in quanto
copia direttamente i file di segmento (binlog, deltalog, file di indice) dalla memoria snapshot
conserva gli ID dei campi e gli ID degli indici per garantire la compatibilità con i file di dati esistenti
evita la riscrittura dei dati e la ricostruzione degli indici, con conseguenti tempi di ripristino significativamente più rapidi, e
garantisce un aumento delle prestazioni da 10 a 100 volte rispetto ai metodi di backup e ripristino tradizionali.
Per ripristinare un'istantanea, procedere come segue:
# 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
Eliminare le istantanee
È possibile eliminare un'istantanea se non è più necessaria. Si consiglia di rimuovere regolarmente le vecchie istantanee per risparmiare spazio di archiviazione.
client.drop_snapshot(
snapshot_name="backup_20240101"
)
// java
dropOpt := milvusclient.NewDropSnapshotOption("backup_20240101")
err := client.DropSnapshot(context.Background(), dropOpt)
// node.js
# restful
Elaborazione dei dati con Spark
Le istantanee consentono un'efficiente elaborazione dei dati offline, fornendo fonti di dati stabili e coerenti per i carichi di lavoro analitici. È possibile accedere direttamente ai dati delle istantanee memorizzati nello storage a oggetti con Spark o con altri framework di elaborazione dei big data senza impattare il cluster Milvus in funzione.
Il codice seguente presuppone che sia stata creata un'istantanea denominata "analytics_snapshot_20260321", memorizzata in un bucket di object storage e ottenute le credenziali di accesso all'object storage.
Passo 1: Ottenere i metadati dell'istantanea
Prima di utilizzare Spark per accedere ai dati dell'istantanea, è necessario ottenere i metadati dell'istantanea per individuare i file di dati nell'object storage.
# 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/"
Passo 2: Avviare una sessione Spark
Con i file di dati nello storage a oggetti, avviare una sessione Spark e leggere i dati in un dataframe.
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()