Casos de uso de las instantáneasCompatible with Milvus 3.0.x
En esta guía encontrará casos de uso habituales para las instantáneas.
Copia de seguridad y restauración de datos
Las instantáneas son imágenes rápidas y puntuales de los datos, adecuadas para realizar reversiones o pruebas rápidas (de días a semanas). Al mismo tiempo, las copias de seguridad son copias independientes y completas que se almacenan por separado para la recuperación de desastres a largo plazo (de semanas a años) y para una mejor protección contra fallos totales de almacenamiento.
En la tabla siguiente se comparan las instantáneas y las copias de seguridad.
Copia de seguridad |
Instantánea |
|
|---|---|---|
Creación de la copia de seguridad |
Copia todos los archivos de datos (consume mucho tiempo) |
Crea sólo los metadatos (en milisegundos) |
Restauración |
Importa datos y reconstruye índices |
Sólo copia los archivos de datos e índices existentes |
Rendimiento |
Lento y consume muchos recursos |
Rápido y ligero (de segundos a minutos) |
Impacto en el sistema |
Alto uso de E/S y CPU |
Impacto mínimo |
La creación de una instantánea suele tardar milisegundos, y su restauración tarda entre segundos y minutos, dependiendo del volumen de datos.
Para obtener más información sobre los límites y restricciones de las instantáneas y su impacto en el sistema, consulte Instantáneas.
Creación de instantáneas
Antes de crear una instantánea, se recomienda dejar de escribir datos en la colección de destino y llamar a flush() para evitar posibles pérdidas de datos.
Cuando asigne un nombre a una instantánea, utilice nombres claros y descriptivos, como "daily_backup_20240101" o "v2.1_production_release" y evite términos genéricos, como "backup1" y "test". Utiliza los nombres de las instantáneas con prudencia para distinguirlas entre versiones, entornos y etapas.
En los siguientes ejemplos de código se asume que ya se dispone de una colección denominada 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
Restaurar instantáneas
Puedes restaurar una instantánea en una nueva colección. Esta operación es asíncrona y devuelve un ID de trabajo para seguir el progreso de la restauración.
La restauración utiliza un mecanismo de copia de segmentos en lugar de importación de datos, que es más eficiente porque
copia directamente los archivos de segmento (binlogs, deltalogs, archivos de índice) del almacenamiento de instantáneas
conserva los identificadores de campo y de índice para garantizar la compatibilidad con los archivos de datos existentes
evita la reescritura de datos y la reconstrucción de índices, lo que se traduce en tiempos de restauración significativamente más rápidos, y
garantiza un aumento del rendimiento de 10 a 100 veces en comparación con los métodos tradicionales de copia de seguridad y restauración.
Para restaurar una instantánea, haga lo siguiente:
# 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
Eliminar instantáneas
Puede eliminar una instantánea si ya no la necesita. Se recomienda eliminar las instantáneas antiguas con regularidad para ahorrar espacio de almacenamiento.
client.drop_snapshot(
snapshot_name="backup_20240101"
)
// java
dropOpt := milvusclient.NewDropSnapshotOption("backup_20240101")
err := client.DropSnapshot(context.Background(), dropOpt)
// node.js
# restful
Procesamiento de datos con Spark
Las instantáneas permiten un procesamiento eficiente de datos fuera de línea, proporcionando fuentes de datos estables y consistentes para cargas de trabajo analíticas. Puede acceder directamente a los datos de instantáneas almacenados en el almacenamiento de objetos con Spark u otros marcos de procesamiento de big data sin afectar al clúster activo de Milvus.
El siguiente código asume que ha creado una instantánea llamada "analytics_snapshot_20260321", la ha almacenado en un cubo de almacenamiento de objetos y ha obtenido las credenciales de acceso al almacenamiento de objetos.
Paso 1: Obtener los metadatos de la instantánea
Antes de utilizar Spark para acceder a los datos de la instantánea, obtenga los metadatos de la instantánea para localizar los archivos de datos en el almacenamiento de objetos.
# 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/"
Paso 2: Iniciar una sesión Spark
Con los archivos de datos en el almacenamiento de objetos, inicie una sesión Spark y lea los datos en un marco de datos.
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()