• Tentang Milvus
  • Memulai
  • Konsep
  • Panduan Pengguna
  • Impor Data
  • Alat AI
  • Panduan Administrasi
  • Peralatan
  • Integrasi
  • Tutorial
  • Pertanyaan Umum
  • API Reference

Kasus Penggunaan SnapshotCompatible with Milvus 3.0.x

Dalam panduan ini, Anda akan menemukan kasus penggunaan umum untuk snapshot.

Pencadangan dan pemulihan data

Snapshot adalah gambar data yang cepat dan langsung pada saat itu juga, cocok untuk pencadangan atau pengujian yang cepat (dalam hitungan hari hingga minggu). Sementara itu, cadangan bersifat independen, salinan lengkap yang disimpan secara terpisah untuk pemulihan bencana jangka panjang (berminggu-minggu hingga bertahun-tahun) dan untuk perlindungan yang lebih baik terhadap kegagalan penyimpanan total.

Tabel berikut ini membandingkan snapshot dan cadangan.

Cadangan

Cuplikan

Pembuatan cadangan

Menyalin semua file data (memakan waktu)

Membuat metadata saja (dalam milidetik)

Pemulihan

Mengimpor data dan membangun kembali indeks

Menyalin data yang sudah ada dan file indeks saja

Kinerja

Lambat dan intensif sumber daya

Cepat dan ringan (dalam hitungan detik hingga menit)

Dampak sistem

Penggunaan I/O dan CPU yang tinggi

Dampak minimal

Membuat snapshot biasanya memerlukan waktu milidetik, dan memulihkannya memerlukan waktu beberapa detik hingga menit, tergantung volume data.

Untuk detail lebih lanjut tentang batas snapshot, batasan, dan dampak sistemnya, lihat Snapshot.

Membuat snapshot

Sebelum membuat snapshot, Anda disarankan untuk berhenti menulis data ke koleksi target dan menghubungi flush() untuk menghindari kemungkinan kehilangan data.

Saat memberi nama snapshot, gunakan nama yang jelas dan deskriptif, seperti "daily_backup_20240101" atau "v2.1_production_release" dan hindari istilah umum, seperti "backup1" dan "test". Gunakan nama snapshot dengan bijak untuk membedakan snapshot di seluruh versi, lingkungan, dan tahapan.

Contoh kode di bawah ini mengasumsikan bahwa Anda sudah memiliki koleksi bernama 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

Memulihkan snapshot

Anda dapat memulihkan snapshot ke koleksi baru. Operasi ini bersifat asinkron dan mengembalikan ID pekerjaan untuk melacak kemajuan restorasi.

Pemulihan menggunakan mekanisme salin-segmen alih-alih impor data, yang lebih efisien karena

  • secara langsung menyalin file segmen (binlog, deltalog, file indeks) dari penyimpanan snapshot

  • mempertahankan ID bidang dan ID indeks untuk memastikan kompatibilitas dengan file data yang ada

  • menghindari penulisan ulang data dan pembangunan kembali indeks, menghasilkan waktu pemulihan yang jauh lebih cepat, dan

  • memastikan peningkatan kinerja 10 hingga 100 kali lipat dibandingkan dengan metode pencadangan dan pemulihan tradisional

Untuk memulihkan snapshot, lakukan hal berikut:

# 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

Menghapus snapshot

Anda dapat membuang snapshot jika tidak lagi diperlukan. Anda disarankan untuk menghapus snapshot lama secara teratur untuk menghemat penyimpanan.

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

Pemrosesan data dengan Spark

Snapshot memungkinkan pemrosesan data offline yang efisien dengan menyediakan sumber data yang stabil dan konsisten untuk beban kerja analitik. Anda dapat secara langsung mengakses data snapshot yang disimpan di penyimpanan objek dengan Spark atau kerangka kerja pemrosesan data besar lainnya tanpa memengaruhi klaster Milvus yang sedang berjalan.

Kode berikut ini mengasumsikan Anda telah membuat snapshot bernama "analytics_snapshot_20260321", menyimpannya di ember penyimpanan objek, dan memperoleh kredensial akses penyimpanan objek.

Langkah 1: Dapatkan metadata snapshot

Sebelum menggunakan Spark untuk mengakses data snapshot, dapatkan metadata snapshot untuk menemukan file data di penyimpanan objek.

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

Langkah 2: Memulai sesi Spark

Dengan file data di penyimpanan objek, mulai sesi Spark dan baca data ke dalam bingkai data.

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

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?