توضّح هذه الصفحة كيفية استخدام MongoDB API ووحدة تحكّم Google Cloud وGoogle Cloud CLI لضبط فهارس مدة الصلاحية (TTL).
نظرة عامة على مدة الصلاحية
استخدِم فهارس TTL لإزالة البيانات القديمة من قواعد البيانات تلقائيًا. يحدّد فهرس TTL حقلاً معيّنًا على أنّه وقت انتهاء صلاحية المستندات في مجموعة معيّنة. باستخدام TTL، يمكنك خفض تكاليف التخزين عن طريق تنظيف البيانات القديمة. يتم عادةً حذف البيانات خلال 24 ساعة من وقت انتهاء صلاحيتها.
الأسعار
تستخدم عمليات الحذف المستندة إلى TTL وحدات حذف مُدارة. لمعرفة الأسعار، يُرجى الاطّلاع على أسعار إصدار Cloud Firestore Enterprise.
الحدود والقيود
- يمكنك إنشاء فهرس TTL واحد فقط لكل مجموعة.
- يمكنك إنشاء 500 فهرس TTL كحدّ أقصى.
الحذف وفقًا لمدة البقاء (TTL)
يُرجى ملاحظة السلوكيات الرئيسية التالية للحذف المستند إلى مدة الصلاحية:
لا تتم عملية الحذف من خلال TTL بشكل فوري. تستمر المستندات منتهية الصلاحية في الظهور في طلبات البحث وطلبات البحث حتى تحذفها عملية TTL فعليًا. يتم استخدام ميزة "مدة الصلاحية" (TTL) لتقليل التكلفة الإجمالية لعمليات الحذف، وذلك على حساب سرعة الحذف. يتم عادةً حذف البيانات في غضون 24 ساعة من وقت انتهاء صلاحيتها.
يؤدي إنشاء فهرس TTL في مجموعة حالية إلى حذف مجمّع لجميع البيانات منتهية الصلاحية وفقًا لفهرس TTL الجديد. يُرجى العِلم أنّ عملية الحذف المجمّع هذه لا تتم بشكل فوري، وتعتمد على حجم البيانات المتوفّرة في تلك المجموعة.
إذا كان المستند يتضمّن وقت انتهاء صلاحية في الماضي وأضفت فهرس TTL جديدًا إلى المجموعة، سيتم حذف المستند في غضون 24 ساعة من وقت انتهاء إعداد فهرس TTL وأصبح نشطًا.
لا يحذف TTL بالضرورة المستندات بالترتيب نفسه الذي تتبعه الطوابع الزمنية لانتهاء صلاحيتها.
لا يتم إجراء عمليات الحذف من خلال المعاملات. لا يتم بالضرورة حذف المستندات التي لها وقت انتهاء الصلاحية نفسه في الوقت نفسه. إذا كنت بحاجة إلى هذا السلوك، يمكنك إجراء عمليات الحذف باستخدام مكتبة عميل.
سيستخدم Cloud Firestore دائمًا أحدث حقل TTL لتحديد تاريخ انتهاء الصلاحية. على سبيل المثال، إذا تم تعديل حقل TTL لمستند منتهي الصلاحية ولكن لم يتم حذفه بعد إلى تاريخ لاحق، لن تنتهي صلاحية المستند وسيتم استخدام التاريخ الجديد.
لا تنتهي صلاحية المستند في Cloud Firestore إلا عندما يتم ضبط حقل مدة البقاء على قيمة
Date and time/BSON Dateأو قيمةArrayتحتوي على قيمةDate and time/BSON Date. يمكنك ترك الحقل فارغًا أو ضبطه على قيمة مثلnullلإيقاف تواريخ انتهاء الصلاحية لكل مستند على حدة.تم تصميم TTL لتقليل التأثير في أنشطة قواعد البيانات الأخرى. وتكون عمليات الحذف المستندة إلى مدة الصلاحية ذات أولوية أقل. توجد أيضًا استراتيجيات أخرى لتخفيف الارتفاعات المفاجئة في عدد الزيارات الناتجة عن عمليات الحذف المستندة إلى مدة الصلاحية.
الاختلافات مع فهارس TTL
على عكس فهارس Firestore الأخرى، لا يتم استخدام فهارس TTL أثناء تخطيط طلبات البحث لتحسين الأداء. لتحسين أداء طلبات البحث في حقل مستخدَم مع TTL، عليك إضافته إلى فهرس منفصل غير مستند إلى TTL.
من المهمّ ملاحظة أنّه بما أنّ حقول TTL تستخدم طوابع زمنية، قد تؤدي إضافتها إلى فهرس لا يتضمّن TTL إلى إنشاء نقاط فعّالة. تحدث النقاط الفعّالة عندما تتركز معدلات عالية من عمليات الكتابة والحذف ضمن نطاق ضيق من المستندات، ما قد يؤثر سلبًا في أداء التوسيع خلال فترات حركة البيانات الكثيفة لعمليات الكتابة.
الأذونات
يتطلّب إنشاء فهرس TTL أو إسقاطه من قِبل المستخدم المفوَّض الحصول على الإذن التالي في المشروع:
- يتطلّب عرض فهارس TTL الحصول على إذنَي
datastore.indexes.listوdatastore.indexes.get. - يتطلّب إنشاء فهارس TTL أو إسقاطها الحصول على إذن
datastore.indexes.update. - يتطلّب التحقّق من حالة عمليات TTL استخدام
datastore.operations.listوdatastore.operations.get.
للاطّلاع على الأدوار التي تمنح هذه الأذونات، يُرجى مراجعة أدوار "إدارة الهوية وإمكانية الوصول" في Cloud Firestore.
إنشاء فهرس TTL
عند إنشاء فهرس TTL، يمكنك تحديد حقل مستند كوقت انتهاء صلاحية المستندات في مجموعة.
تستخدم ميزة TTL حقلاً محدّدًا لتحديد المستندات المؤهَّلة للحذف.
يجب ضبط حقل TTL على قيمة Timestamp/BSON Date أو قيمة Array تحتوي على قيمة Timestamp/BSON Date. يمكنك اختيار حقل موجود بالفعل أو يمكنك تعيين حقل تخطط لإضافته لاحقًا.
يُرجى مراعاة ما يلي قبل ضبط قيمة حقل TTL:
يمكن أن تكون قيمة حقل TTL وقتًا في المستقبل أو الآن أو في الماضي. إذا كانت القيمة تشير إلى وقت في الماضي، يصبح المستند مؤهلاً للحذف على الفور. على سبيل المثال، يمكنك إنشاء فهرس TTL باستخدام الحقل
expireAt، ثم إضافته إلى المستندات الحالية.سيؤدي استخدام أي نوع بيانات آخر أو عدم ضبط قيمة حقل TTL إلى إيقاف TTL للمستند الفردي.
لإنشاء فهرس TTL، اتّبِع الخطوات التالية:
MongoDB API
أدرِج خيار الفهرس expireAfterSeconds عند استدعاء الإجراء createIndex():
db.COLLECTION_NAME.createIndex({"TTL_FIELD": 1, "expireAfterSeconds": EXPIRATION_OFFSET_SECONDS})
على سبيل المثال:
db.restaurants.createIndex({"ts": 1, "expireAfterSeconds": 3600})
يحدّد expireAfterSeconds مدة البقاء (TTL) كفهرس TTL، وهو الإزاحة بين قيمة الطابع الزمني من حقل TTL ووقت انتهاء الصلاحية. إذا تم ضبط expireAfterSeconds على 0، يتم تحديد وقت انتهاء الصلاحية مباشرةً من خلال قيمة الطابع الزمني من حقل مدة البقاء (TTL).
يُرجى ملاحظة القيود التالية:
- يجب أن تتضمّن فهارس TTL حقلاً واحدًا بالضبط.
- لا يتم استخدام فهارس TTL في تخطيط طلبات البحث، ولا تؤدي إلى تحسين أداء طلبات البحث.
- يمكنك إنشاء فهرس TTL واحد فقط لكل مجموعة.
- تستخدم سجلات التدقيق لإنشاء فهرس TTL باستخدام واجهة برمجة التطبيقات MongoDB اسم الطريقة
google.firestore.admin.v1.FirestoreAdmin.UpdateField.
Google Cloud Console
في وحدة تحكّم Google Cloud، انتقِل إلى صفحة قواعد البيانات.
اختَر قاعدة البيانات المطلوبة من قائمة قواعد البيانات.
في قائمة التنقّل، انقر على مدة الصلاحية.
انقر على إنشاء سياسة.
أدخِل اسم مجموعة واسم حقل طابع زمني.
اختياري: اضبط إزاحة انتهاء الصلاحية. أدخِل قيمة واختَر وحدة (أيام أو ساعات أو دقائق أو ثوانٍ). يكون الإزاحة تلقائيًا 0.
انقر على إنشاء.
تعود وحدة التحكّم إلى صفحة مدة الصلاحية. إذا بدأت العملية بنجاح، ستضيف الصفحة إدخالاً إلى جدول فهارس TTL. في حال تعذّر ذلك، ستعرض الصفحة رسالة خطأ.
gcloud
استخدِم الأمر
firestore fields ttls updateلضبط فهرس TTL. أضِف العلامة--asyncلمنع gcloud CLI من انتظار اكتمال العملية.gcloud firestore fields ttls update \ ttl_field \ --collection-group=collection_name \ --enable-ttl
لتفعيل فهرس TTL مع إزاحة انتهاء الصلاحية، أضِف العلامة
--expiration-offset:gcloud firestore fields ttls update \ ttl_field \ --collection-group=collection_name \ --enable-ttl \ --expiration-offset=expiration_offset
استبدِل expiration_offset بمدة، على سبيل المثال،
7dلمدة 7 أيام أو24hلمدة 24 ساعة. في حال حذف هذه العلامة، يتم ضبط قيمة الإزاحة التلقائية لانتهاء الصلاحية على 0.
مدة إنشاء فهرس TTL
قد يستغرق إنشاء فهرس TTL عشر دقائق على الأقل أو أكثر. بعد بدء عملية، لا يؤدي إغلاق الوحدة الطرفية إلى إلغاء العملية.
عرض فهارس TTL
لعرض فهارس TTL، اتّبِع الخطوات التالية:
MongoDB API
استخدِم طريقة listIndexes() لعرض فهارس TTL. على سبيل المثال:
db.restaurants.listIndexes()
يُرجى العِلم أنّ الناتج سيتضمّن كلاً من فهارس TTL وغير TTL. ستتضمّن فهارس TTL
الخيار expireAfterSeconds.
Google Cloud Console
في وحدة تحكّم Google Cloud، انتقِل إلى صفحة قواعد البيانات.
اختَر قاعدة البيانات المطلوبة من قائمة قواعد البيانات.
في قائمة التنقّل، انقر على مدة الصلاحية.
تعرض وحدة التحكّم فهارس TTL لقاعدة بياناتك وتتضمّن حالة كل فهرس.
gcloud
استخدِم الأمر
firestore fields ttls listلضبط فهرس TTL. يسرد الأمر التالي جميع فهارس TTL.gcloud firestore fields ttls list
لإدراج فهارس TTL ضمن مجموعة معيّنة، استخدِم ما يلي:
gcloud firestore fields ttls list --collection-group=collection_name
عرض تفاصيل العملية
يمكنك استخدام gcloud CLI للاطّلاع على مزيد من التفاصيل حول فهرس TTL
في الحالة CREATING.
استخدِم الأمر operations list للاطّلاع على جميع العمليات الجارية
والمكتملة مؤخرًا:
gcloud firestore operations list
يتضمّن الردّ تقديرًا لمدى تقدّم العملية.
إسقاط فهرس TTL
لإسقاط فهرس TTL، اتبع الخطوات التالية:
MongoDB API
استخدِم طريقة dropIndex() لإسقاط فهرس TTL. على سبيل المثال:
إسقاط فهرس TTL باستخدام اسم الفهرس
db.restaurants.dropIndex("ts_1")
إسقاط فهرس TTL باستخدام تعريف الفهرس
db.restaurants.dropIndex({"ts": 1})
يُرجى العِلم أنّ سجلات التدقيق لإسقاط فهرس TTL باستخدام واجهة برمجة التطبيقات MongoDB تستخدم اسم الطريقة google.firestore.admin.v1.FirestoreAdmin.UpdateField.
Google Cloud Console
في وحدة تحكّم Google Cloud، انتقِل إلى صفحة قواعد البيانات.
اختَر قاعدة البيانات المطلوبة من قائمة قواعد البيانات.
في قائمة التنقّل، انقر على مدة الصلاحية.
في جدول فهرس TTL، ابحث عن صف فهرس TTL. ضمن صف الجدول هذا، انقر على الزر حذف (سلة المهملات).
أكِّد الإجراء من خلال النقر على حذف.
تعود وحدة التحكّم إلى صفحة مدة الصلاحية. في حال نجاح العملية، يزيل Cloud Firestore فهرس TTL من الجدول.
gcloud
استخدِم الأمر
firestore fields ttls updateلضبط فهرس TTL. أضِف العلامة--asyncلمنع gcloud CLI من انتظار اكتمال العملية.gcloud firestore fields ttls update ttl_field --collection-group=collection_name --disable-ttl
مراقبة عمليات الحذف المستندة إلى مدة البقاء
يمكنك استخدام Cloud Monitoring لعرض مقاييس حول عمليات الحذف المستندة إلى مدة الصلاحية. يوفّر Cloud Firestore المقاييس التالية لـ TTL:
| نوع المقياس | اسم المقياس | وصف المقاييس |
|---|---|---|
| firestore.googleapis.com/document/ttl_deletion_count | عدد عمليات الحذف في الوقت الفعلي |
إجمالي عدد المستندات التي تم حذفها بواسطة فهارس TTL |
| firestore.googleapis.com/document/ttl_expiration_to_deletion_delays | التأخيرات في الحذف بسبب انتهاء صلاحية مدة البقاء |
الوقت المنقضي بين وقت انتهاء صلاحية مستند ضمن فهرس TTL ووقت حذفه فعليًا. |
لإعداد لوحة بيانات تتضمّن مقاييس "Cloud Firestore"، يُرجى الاطّلاع على المقالتَين إدارة لوحة البيانات المخصّصة وإضافة تطبيقات مصغّرة إلى لوحة البيانات.