• Acerca de Milvus
  • Comenzar
  • Conceptos
  • Guía del usuario
  • Importación de datos
  • Herramientas de IA
  • Guía de administración
  • Herramientas
  • Integraciones
  • Tutoriales
  • Preguntas frecuentes
  • API Reference

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