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

توضّح هذه الصفحة كيفية استخدام واجهة برمجة تطبيقات MongoDB ووحدة تحكّم 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 بأولوية أقل. تتوفّر أيضًا استراتيجيات أخرى لتخفيف حدّة الارتفاعات المفاجئة في عدد الزيارات الناتجة عن عمليات الحذف المستندة إلى قيمة 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) على القيمة Timestamp/BSON Date أو القيمة Array التي تتضمّن القيمة Timestamp/BSON Date. يمكنك اختيار حقل متوفّر أو تحديد حقل تنوي إضافته لاحقًا.

يُرجى مراعاة ما يلي قبل ضبط قيمة حقل 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 مدة البقاء كفهرس لمدّة البقاء، وهو الإزاحة بين قيمة الطابع الزمني من حقل مدة البقاء ووقت انتهاء الصلاحية. إذا تم ضبط expireAfterSeconds على 0، يتم تحديد وقت انتهاء الصلاحية مباشرةً من خلال قيمة الطابع الزمني من حقل مدة البقاء (TTL).

يُرجى مراعاة القيود التالية:

  • يجب أن تتضمّن فهارس TTL حقلًا واحدًا بالضبط.
  • لا تُستخدَم فهارس TTL في تخطيط طلبات البحث، ولا تحسِّن أداء طلبات البحث.
  • يمكنك إنشاء فهرس TTL واحد فقط لكل مجموعة.
  • تستخدِم سجلات التدقيق لإنشاء فهرس TTL باستخدام MongoDB API اسم الطريقة google.firestore.admin.v1.FirestoreAdmin.UpdateField.

Google Cloud Console

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

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

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

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

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

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

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

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

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

gcloud

  1. ثبِّت وابدأ واجهة سطر الأوامر gcloud 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 Console، انتقِل إلى صفحة قواعد البيانات.

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

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

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

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

gcloud

  1. ثبِّت وابدأ واجهة سطر الأوامر gcloud 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 Console، انتقِل إلى صفحة قواعد البيانات.

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

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

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

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

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

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

gcloud

  1. ثبِّت وابدأ واجهة سطر الأوامر gcloud CLI.

  2. استخدِم الأمر firestore fields ttls update لإعداد فهرس TTL. أضِف العلامة --async لمنع gcloud CLI من انتظار اكتمال العملية.

    gcloud firestore fields ttls update ttl_field --collection-group=collection_name --disable-ttl
    

مراقبة عمليات الحذف حسب مدة البقاء (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، راجِع إدارة لوحة البيانات المخصّصة وإضافة أدوات لوحة البيانات.