• نبذة عن ميلفوس
  • ابدأ الآن
  • المفاهيم
  • دليل المستخدم
  • استيراد البيانات
  • أدوات الذكاء الاصطناعي
  • دليل الإدارة
  • الأدوات
  • عمليات الدمج
  • البرامج التعليمية
  • الأسئلة الشائعة
  • API Reference

إدارة اللقطات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

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟