حالات استخدام اللقطاتCompatible with Milvus 3.0.x
ستجد في هذا الدليل حالات استخدام شائعة للقطات.
النسخ الاحتياطي للبيانات واستعادتها
اللقطات عبارة عن صور سريعة للبيانات في الوقت المناسب، وهي مناسبة للاسترجاع السريع أو الاختبار السريع (من أيام إلى أسابيع). في الوقت نفسه، فإن النسخ الاحتياطية هي نسخ مستقلة وكاملة مخزنة بشكل منفصل لاستعادة البيانات على المدى الطويل (من أسابيع إلى سنوات) ولحماية أفضل ضد فشل التخزين الكلي.
يقارن الجدول التالي بين اللقطات والنسخ الاحتياطية.
النسخ الاحتياطية |
اللقطات |
|
|---|---|---|
إنشاء النسخ الاحتياطية |
نسخ جميع ملفات البيانات (تستغرق وقتاً طويلاً) |
إنشاء البيانات الوصفية فقط (بالمللي ثانية) |
الاستعادة |
استيراد البيانات وإعادة إنشاء الفهارس |
نسخ البيانات الموجودة وملفات الفهرس فقط |
الأداء |
بطيئة وكثيفة الاستخدام للموارد |
سريع وخفيف الوزن (من ثوانٍ إلى دقائق) |
تأثير النظام |
استخدام عالي للإدخال/الإخراج ووحدة المعالجة المركزية |
تأثير ضئيل |
يستغرق إنشاء لقطة عادةً أجزاء من الثانية، وتستغرق استعادتها من ثوانٍ إلى دقائق، اعتماداً على حجم البيانات.
لمزيد من التفاصيل حول حدود اللقطات والقيود وتأثيراتها على النظام، راجع اللقطات.
إنشاء اللقطات
قبل إنشاء لقطة، يُنصح بإيقاف كتابة البيانات إلى المجموعة المستهدفة واستدعاء 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
استعادة اللقطات
يمكنك استعادة لقطة إلى مجموعة جديدة. هذه العملية غير متزامنة وتُرجع معرّف مهمة لتتبع تقدم الاستعادة.
تستخدم عملية الاستعادة آلية نسخ المقطع بدلاً من استيراد البيانات، وهي أكثر كفاءة لأنها
تقوم بنسخ ملفات المقاطع مباشرةً (السجلات المجمعة والدليلات وملفات الفهرس) من تخزين اللقطات
يحافظ على معرّفات الحقول ومعرفات الفهرس لضمان التوافق مع ملفات البيانات الموجودة
يتجنب إعادة كتابة البيانات وإعادة بناء الفهرس، مما يؤدي إلى أوقات استعادة أسرع بكثير، و
يضمن زيادة في الأداء من 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
معالجة البيانات باستخدام Spark
تتيح اللقطات معالجة البيانات بكفاءة دون اتصال بالإنترنت من خلال توفير مصادر بيانات ثابتة ومتسقة لأعباء العمل التحليلية. يمكنك الوصول مباشرةً إلى بيانات اللقطات المخزنة في تخزين الكائنات باستخدام Spark أو غيرها من أطر معالجة البيانات الضخمة دون التأثير على مجموعة Milvus المباشرة.
يفترض الرمز التالي أنك قمت بإنشاء لقطة مسماة "analytics_snapshot_20260321" ، وتخزينها في دلو تخزين كائنات، والحصول على بيانات اعتماد الوصول إلى تخزين الكائنات.
الخطوة 1: الحصول على البيانات الوصفية للقطات
قبل استخدام Spark للوصول إلى بيانات اللقطة، احصل على البيانات الوصفية للقطات لتحديد موقع ملفات البيانات في مخزن الكائنات.
# 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/"
الخطوة 2: بدء جلسة Spark
باستخدام ملفات البيانات في مخزن الكائنات، ابدأ جلسة Spark واقرأ البيانات في إطار بيانات.
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()