إدارة اللقطاتCompatible with Milvus 3.0.x
في هذا الدليل، سوف تتعلم كيفية إنشاء اللقطات وإدارتها.
إنشاء لقطة
قبل إنشاء لقطة، يُنصح بإيقاف كتابة البيانات إلى المجموعة المستهدفة واستدعاء flush() لتجنب فقدان البيانات المحتمل.
استدعاء flush() ليس إلزاميًا ولكن يوصى به بشدة لتجنب فقدان البيانات. إذا تخطيت ذلك، فإن اللقطة تحتوي فقط على البيانات التي تم مسحها بالفعل.
عند تسمية اللقطة، استخدم أسماء واضحة ووصفية، مثل "daily_backup_20240101" أو "v2.1_production_release" وتجنب المصطلحات العامة، مثل "backup1" و "test". استخدم أسماء اللقطات بحكمة لتمييز اللقطات عبر الإصدارات والبيئات والمراحل.
تفترض الأمثلة البرمجية أدناه أن لديك بالفعل مجموعة باسم 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
سرد اللقطات
يمكنك سرد أسماء اللقطات الموجودة.
# List all snapshots for a collection
snapshots = client.list_snapshots(
collection_name="my_collection"
)
// java
// List snapshots for collection
listOpt := milvusclient.NewListSnapshotsOption().
WithCollectionName("my_collection")
snapshots, err := client.ListSnapshots(context.Background(), listOpt)
// node.js
# bash
وصف اللقطة
يمكنك الحصول على معلومات مفصلة حول لقطة معينة.
snapshot_info = client.describe_snapshot(
snapshot_name="backup_20240101",
include_collection_info=True
)
print(f"Snapshot ID: {snapshot_info.id}")
print(f"Collection: {snapshot_info.collection_name}")
print(f"Created: {snapshot_info.create_ts}")
print(f"Description: {snapshot_info.description}")
// java
describeOpt := milvusclient.NewDescribeSnapshotOption("backup_20240101")
resp, err := client.DescribeSnapshot(context.Background(), describeOpt)
fmt.Printf("Snapshot ID: %d\n", resp.GetSnapshotInfo().GetId())
fmt.Printf("Collection: %s\n", resp.GetSnapshotInfo().GetCollectionName())
// node.js
# restful
استعادة لقطة
يمكنك استعادة لقطة إلى مجموعة جديدة. هذه العملية غير متزامنة وتُرجع معرّف مهمة لتتبع تقدم الاستعادة.
تستخدم عملية الاستعادة آلية نسخ المقطع بدلاً من استيراد البيانات، وهي أكثر كفاءة لأنها
تقوم بنسخ ملفات المقاطع مباشرةً (السجلات المجمعة والدليلات وملفات الفهرس) من تخزين اللقطات
تحافظ على معرّفات الحقول ومعرفات الفهرس لضمان التوافق مع ملفات البيانات الموجودة
يتجنب إعادة كتابة البيانات وإعادة بناء الفهرس، مما يؤدي إلى أوقات استعادة أسرع بكثير، و
تضمن زيادة الأداء من 10 إلى 100 ضعف مقارنةً بطرق النسخ الاحتياطي والاستعادة التقليدية
لاستعادة لقطة، قم بما يلي:
# 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
للحصول على تفاصيل حول مراقبة تقدم مهمة الاستعادة، راجع مراقبة تقدم الاستعادة.
إسقاط لقطة
يمكنك إسقاط لقطة إذا لم تعد هناك حاجة إليها. يُنصح بإزالة اللقطات القديمة بانتظام لحفظ التخزين.
client.drop_snapshot(
snapshot_name="backup_20240101"
)
// java
dropOpt := milvusclient.NewDropSnapshotOption("backup_20240101")
err := client.DropSnapshot(context.Background(), dropOpt)
// node.js
# restful
سرد مهام الاستعادة
يمكنك استخدام واجهة برمجة التطبيقات هذه للحصول على قائمة اللقطات التي تم إنشاؤها بالفعل للمجموعة المستهدفة.
# List all restore jobs
jobs = client.list_restore_snapshot_jobs()
for job in jobs:
print(f"Job {job.job_id}: {job.snapshot_name} -> Collection {job.collection_id}")
print(f" State: {job.state}, Progress: {job.progress}%")
# List restore jobs for a specific collection
jobs = client.list_restore_snapshot_jobs(collection_name="my_collection")
// java
// List all restore jobs
listOpt := milvusclient.NewListRestoreSnapshotJobsOption()
jobs, err := client.ListRestoreSnapshotJobs(context.Background(), listOpt)
if err != nil {
log.Fatal(err)
}
for _, job := range jobs {
fmt.Printf("Job %d: %s -> Collection %d\n",
job.GetJobId(), job.GetSnapshotName(), job.GetCollectionId())
fmt.Printf(" State: %s, Progress: %d%%\n",
job.GetState(), job.GetProgress())
}
// List restore jobs for a specific collection
listOpt = milvusclient.NewListRestoreSnapshotJobsOption().
WithCollectionName("my_collection")
jobs, err = client.ListRestoreSnapshotJobs(context.Background(), listOpt)
// node.js
# restful
الحصول على حالة الاستعادة
بمجرد أن يكون لديك معرف مهمة استعادة، يمكنك استخدامه لاسترداد تقدم الاستعادة.
state = client.get_restore_snapshot_state(job_id=12345)
print(f"Job ID: {state.job_id}")
print(f"Snapshot Name: {state.snapshot_name}")
print(f"Collection ID: {state.collection_id}")
print(f"State: {state.state}")
print(f"Progress: {state.progress}%")
if state.state == "RestoreSnapshotFailed":
print(f"Failure Reason: {state.reason}")
print(f"Time Cost: {state.time_cost}ms")
// java
stateOpt := milvusclient.NewGetRestoreSnapshotStateOption(12345)
state, err := client.GetRestoreSnapshotState(context.Background(), stateOpt)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Job ID: %d\n", state.GetJobId())
fmt.Printf("Snapshot Name: %s\n", state.GetSnapshotName())
fmt.Printf("Collection ID: %d\n", state.GetCollectionId())
fmt.Printf("State: %s\n", state.GetState())
fmt.Printf("Progress: %d%%\n", state.GetProgress())
if state.GetState() == milvuspb.RestoreSnapshotState_RestoreSnapshotFailed {
fmt.Printf("Failure Reason: %s\n", state.GetReason())
}
fmt.Printf("Time Cost: %dms\n", state.GetTimeCost())
// node.js
# restful