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