إدارة الاحتفاظ بالبيانات باستخدام فهارس TTL

توضّح هذه الصفحة كيفية استخدام 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

  1. في وحدة تحكّم Google Cloud، انتقِل إلى صفحة قواعد البيانات.

    الانتقال إلى "قواعد البيانات"

  2. اختَر قاعدة البيانات المطلوبة من قائمة قواعد البيانات.

  3. في قائمة التنقّل، انقر على مدة الصلاحية.

  4. انقر على إنشاء سياسة.

  5. أدخِل اسم مجموعة واسم حقل طابع زمني.

  6. اختياري: اضبط إزاحة انتهاء الصلاحية. أدخِل قيمة واختَر وحدة (أيام أو ساعات أو دقائق أو ثوانٍ). يكون الإزاحة تلقائيًا 0.

  7. انقر على إنشاء.

تعود وحدة التحكّم إلى صفحة مدة الصلاحية. إذا بدأت العملية بنجاح، ستضيف الصفحة إدخالاً إلى جدول فهارس TTL. في حال تعذّر ذلك، ستعرض الصفحة رسالة خطأ.

gcloud

  1. ثبِّت gcloud CLI CLI وافتحه.

  2. استخدِم الأمر 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

  1. في وحدة تحكّم Google Cloud، انتقِل إلى صفحة قواعد البيانات.

    الانتقال إلى "قواعد البيانات"

  2. اختَر قاعدة البيانات المطلوبة من قائمة قواعد البيانات.

  3. في قائمة التنقّل، انقر على مدة الصلاحية.

تعرض وحدة التحكّم فهارس TTL لقاعدة بياناتك وتتضمّن حالة كل فهرس.

gcloud

  1. ثبِّت gcloud CLI CLI وافتحه.

  2. استخدِم الأمر 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

  1. في وحدة تحكّم Google Cloud، انتقِل إلى صفحة قواعد البيانات.

    الانتقال إلى "قواعد البيانات"

  2. اختَر قاعدة البيانات المطلوبة من قائمة قواعد البيانات.

  3. في قائمة التنقّل، انقر على مدة الصلاحية.

  4. في جدول فهرس TTL، ابحث عن صف فهرس TTL. ضمن صف الجدول هذا، انقر على الزر حذف (سلة المهملات).

  5. أكِّد الإجراء من خلال النقر على حذف.

تعود وحدة التحكّم إلى صفحة مدة الصلاحية. في حال نجاح العملية، يزيل Cloud Firestore فهرس TTL من الجدول.

gcloud

  1. ثبِّت gcloud CLI CLI وافتحه.

  2. استخدِم الأمر 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"، يُرجى الاطّلاع على المقالتَين إدارة لوحة البيانات المخصّصة وإضافة تطبيقات مصغّرة إلى لوحة البيانات.