• À propos de Milvus
  • Commencer
  • Concepts
  • Guide de l'utilisateur
  • Importation de données
  • Outils d'IA
  • Guide d'administration
  • Outils
  • Intégrations
  • Tutoriels
  • FAQ
  • API Reference

Cas d'utilisation des instantanésCompatible with Milvus 3.0.x

Dans ce guide, vous trouverez des cas d'utilisation courants pour les instantanés.

Sauvegarde et restauration des données

Les instantanés sont des images rapides et ponctuelles des données, adaptées à des retours en arrière rapides ou à des tests (quelques jours à quelques semaines). Parallèlement, les sauvegardes sont des copies indépendantes et complètes, stockées séparément pour la reprise après sinistre à long terme (de quelques semaines à quelques années) et pour une meilleure protection contre les pannes totales de stockage.

Le tableau suivant compare les instantanés et les sauvegardes.

Sauvegarde

Instantané

Création d'une sauvegarde

Copie tous les fichiers de données (chronophage)

Crée uniquement les métadonnées (en millisecondes)

Restauration

Importe les données et reconstruit les index

Copie uniquement les fichiers de données et d'index existants

Performances

Lent et gourmand en ressources

Rapide et léger (de quelques secondes à quelques minutes)

Impact sur le système

Utilisation élevée des E/S et de l'unité centrale

Impact minimal

La création d'un instantané prend généralement quelques millisecondes, et sa restauration prend de quelques secondes à quelques minutes, en fonction du volume de données.

Pour plus de détails sur les limites et les restrictions des instantanés, ainsi que sur leur impact sur le système, reportez-vous à la section Instantanés.

Créer des instantanés

Avant de créer un instantané, il est conseillé d'arrêter d'écrire des données dans la collection cible et d'appeler flush() pour éviter toute perte de données.

Lorsque vous nommez un instantané, utilisez des noms clairs et descriptifs, tels que "daily_backup_20240101" ou "v2.1_production_release", et évitez les termes génériques, tels que "backup1" et "test". Utilisez les noms d'instantanés à bon escient pour distinguer les instantanés entre les versions, les environnements et les étapes.

Les exemples de code ci-dessous supposent que vous disposez déjà d'une collection nommée 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

Restauration d'instantanés

Vous pouvez restaurer un instantané dans une nouvelle collection. Cette opération est asynchrone et renvoie un identifiant de travail permettant de suivre la progression de la restauration.

La restauration utilise un mécanisme de copie de segments au lieu d'une importation de données, ce qui est plus efficace car cela permet de

  • copie directement les fichiers de segments (binlogs, deltalogs, fichiers d'index) à partir du stockage d'instantanés

  • préserve les identifiants des champs et des index pour assurer la compatibilité avec les fichiers de données existants

  • évite la réécriture des données et la reconstruction des index, ce qui accélère considérablement les temps de restauration, et

  • garantit une augmentation des performances de 10 à 100 fois par rapport aux méthodes de sauvegarde et de restauration traditionnelles.

Pour restaurer un instantané, procédez comme suit :

# 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

Abandon d'instantanés

Vous pouvez supprimer un instantané s'il n'est plus nécessaire. Il est conseillé de supprimer régulièrement les anciens clichés afin d'économiser de l'espace de stockage.

client.drop_snapshot(
    snapshot_name="backup_20240101"
)
// java
dropOpt := milvusclient.NewDropSnapshotOption("backup_20240101")
err := client.DropSnapshot(context.Background(), dropOpt)
// node.js
# restful

Traitement des données avec Spark

Les snapshots permettent un traitement efficace des données hors ligne en fournissant des sources de données stables et cohérentes pour les charges de travail analytiques. Vous pouvez accéder directement aux données des snapshots stockées dans le stockage objet avec Spark ou d'autres frameworks de traitement des big data sans avoir d'impact sur le cluster Milvus en direct.

Le code suivant suppose que vous avez créé un instantané nommé "analytics_snapshot_20260321", que vous l'avez stocké dans un seau de stockage d'objets et que vous avez obtenu les informations d'identification d'accès au stockage d'objets.

Etape 1 : Obtenir les métadonnées de l'instantané

Avant d'utiliser Spark pour accéder aux données de l'instantané, obtenez les métadonnées de l'instantané pour localiser les fichiers de données dans le stockage d'objets.

# 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/"

Etape 2 : Démarrer une session Spark

Avec les fichiers de données dans le stockage d'objets, lancez une session Spark et lisez les données dans un cadre de données.

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