• Sobre Milvus
  • Começar a trabalhar
  • Conceitos
  • Guia do utilizador
  • Importação de dados
  • Ferramentas de IA
  • Guia de Administração
  • Ferramentas
  • Integrações
  • Tutoriais
  • FAQs
  • API Reference

Casos de utilização de instantâneosCompatible with Milvus 3.0.x

Neste guia, encontrará casos de utilização comuns para instantâneos.

Backup e restauração de dados

Os instantâneos são imagens rápidas e pontuais dos dados, adequadas para reversões ou testes rápidos (dias a semanas). Ao mesmo tempo, as cópias de segurança são cópias independentes e completas armazenadas separadamente para recuperação de desastres a longo prazo (semanas a anos) e para uma melhor proteção contra falhas totais de armazenamento.

A tabela seguinte compara instantâneos e cópias de segurança.

Backup

Instantâneo

Criação de backup

Copia todos os ficheiros de dados (demorado)

Cria apenas metadados (em milissegundos)

Restauração

Importa dados e reconstrói índices

Copia apenas os dados existentes e os ficheiros de índice

Desempenho

Lento e com uso intensivo de recursos

Rápido e leve (em segundos a minutos)

Impacto no sistema

Elevada utilização de E/S e CPU

Impacto mínimo

A criação de um instantâneo geralmente leva milissegundos, e a restauração leva de segundos a minutos, dependendo do volume de dados.

Para obter mais detalhes sobre limites e restrições de instantâneos e seus impactos no sistema, consulte Instantâneos.

Criar instantâneos

Antes de criar um instantâneo, é aconselhável parar de gravar dados na coleção de destino e chamar flush() para evitar uma possível perda de dados.

Ao nomear um instantâneo, use nomes claros e descritivos, como "daily_backup_20240101" ou "v2.1_production_release" e evite termos genéricos, como "backup1" e "test". Use nomes de snapshot com sabedoria para distinguir snapshots entre versões, ambientes e estágios.

Os exemplos de código abaixo assumem que você já tem uma coleção chamada 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âneos

É possível restaurar um snapshot para uma nova coleção. Essa operação é assíncrona e retorna um ID de trabalho para acompanhar o progresso da restauração.

A restauração usa um mecanismo de cópia de segmento em vez de importação de dados, que é mais eficiente porque

  • copia diretamente os arquivos de segmento (binlogs, deltalogs, arquivos de índice) do armazenamento de instantâneos

  • preserva IDs de campo e IDs de índice para garantir a compatibilidade com arquivos de dados existentes

  • evita a regravação de dados e a reconstrução de índices, resultando em tempos de restauro significativamente mais rápidos, e

  • garante um aumento de desempenho de 10 a 100 vezes em comparação com os métodos tradicionais de backup e restauração

Para restaurar um instantâneo, faça o seguinte:

# 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âneos

Pode eliminar um instantâneo se este já não for necessário. Aconselha-se a remover regularmente os instantâneos antigos para poupar armazenamento.

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

Processamento de dados com o Spark

Os instantâneos permitem um processamento de dados offline eficiente, fornecendo fontes de dados estáveis e consistentes para cargas de trabalho analíticas. É possível acessar diretamente os dados de instantâneos armazenados no armazenamento de objetos com o Spark ou outras estruturas de processamento de big data sem afetar o cluster Milvus ativo.

O código a seguir pressupõe que você criou um snapshot chamado "analytics_snapshot_20260321", armazenou-o em um bucket de armazenamento de objetos e obteve as credenciais de acesso ao armazenamento de objetos.

Etapa 1: obter metadados do snapshot

Antes de usar o Spark para acessar os dados do snapshot, obtenha os metadados do snapshot para localizar os arquivos de dados no armazenamento 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/"

Etapa 2: iniciar uma sessão do Spark

Com os arquivos de dados no armazenamento de objetos, inicie uma sessão do Spark e leia os dados em um 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()