مدیریت نگهداری داده با شاخص‌های TTL

این صفحه نحوه استفاده از MongoDB API، کنسول Google Cloud، و Google Cloud CLI را برای پیکربندی شاخص‌های زمان فعال بودن دستگاه (TTL) شرح می‌دهد.

نمای کلی زمان زنده

از شاخص‌های TTL برای حذف خودکار داده‌های قدیمی از پایگاه‌های داده استفاده کنید. شاخص TTL فیلد معینی را به‌عنوان زمان انقضای اسناد در مجموعه‌ای معین تعیین می‌کند. با «زمان زنده بودن» می‌توانید با پاک کردن داده‌های منسوخ، هزینه‌های فضای ذخیره‌سازی را کاهش دهید. داده‌ها معمولاً ظرف ۲۴ ساعت پس‌از زمان انقضایشان حذف می‌شوند.

قیمت‌گذاری

عملیات حذف TTL از واحدهای حذف مدیریت‌شده استفاده می‌کند. برای قیمت‌گذاری، به Cloud Firestore قیمت‌گذاری نسخه سازمانی مراجعه کنید.

محدودیت‌ها و موانع

  • برای هر مجموعه فقط یک نمایه TTL می‌توانید ایجاد کنید.
  • می‌توانید حداکثر ۵۰۰ شاخص TTL داشته باشید.

حذف TTL

به رفتارهای کلیدی زیر در حذف براساس TTL توجه کنید:

  • حذف ازطریق TTL فرایندی فوری نیست. اسناد منقضی‌شده تا زمانی که فرایند TTL آن‌ها را حذف کند، در پُرسمان‌ها و درخواست‌های جستجو همچنان نشان داده می‌شوند. ‫TTL سرعت حذف را با مزیت کاهش هزینه کل مالکیت برای حذف‌ها معاوضه می‌کند. داده‌ها معمولاً ظرف ۲۴ ساعت پس‌از زمان انقضایشان حذف می‌شوند.

  • ایجاد شاخص TTL در مجموعه‌ای موجود منجر به حذف انبوه همه داده‌های منقضی‌شده براساس شاخص TTL جدید می‌شود. توجه داشته باشید که این حذف انبوه نیز فوری نیست و به میزان داده‌های موجود برای آن مجموعه بستگی دارد.

  • اگر سندی زمان انقضای گذشته داشته باشد و نمایه TTL جدیدی به مجموعه اضافه کنید، سند ظرف ۲۴ ساعت پس‌از تکمیل راه‌اندازی نمایه TTL و فعال شدن آن حذف خواهد شد.

  • ‫TTL لزوماً اسناد را به همان ترتیبی که مُهر زمان انقضای آن‌ها است حذف نمی‌کند.

  • حذف‌ها به‌صورت تراکنشی انجام نمی‌شوند. اسنادی که زمان انقضای یکسانی دارند لزوماً در یک زمان حذف نمی‌شوند. اگر به این رفتار نیاز دارید، حذف‌ها را بااستفاده از کتابخانه کارخواه انجام دهید.

  • ‫Cloud Firestore همیشه جدیدترین فیلد 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، به اجازه‌های 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 «زمان زنده ماندن» را به‌عنوان شاخص «زمان زنده ماندن» شناسایی می‌کند و انحراف بین مقدار مُهر زمان از فیلد «زمان زنده ماندن» و زمان انقضا است. اگر expireAfterSeconds روی 0 تنظیم شده باشد، زمان انقضا مستقیماً از مقدار مُهر زمان فیلد TTL داده می‌شود.

محدودیت‌های زیر را درنظر داشته باشید:

  • شاخص‌های TTL باید دقیقاً یک فیلد داشته باشند.
  • نمایه‌های TTL در برنامه‌ریزی پُرسمان استفاده نمی‌شوند و عملکرد پُرسمان‌ها را بهبود نمی‌دهند.
  • برای هر مجموعه فقط یک نمایه TTL می‌توانید ایجاد کنید.
  • گزارش‌های ممیزی برای ایجاد نمایه‌ TTL بااستفاده از MongoDB API از نام روش google.firestore.admin.v1.FirestoreAdmin.UpdateField استفاده می‌کنند.

Google Cloud Console

  1. در کنسول Google Cloud، به صفحه پایگاه‌های داده بروید.

    رفتن به «پایگاه‌های داده»

  2. پایگاه داده موردنیاز را از فهرست پایگاه‌های داده انتخاب کنید.

  3. در منوِ پیمایش، روی زمان زنده بودن کلیک کنید.

  4. روی ایجاد خط‌مشی کلیک کنید.

  5. نام مجموعه و نام فیلد مُهر زمان را وارد کنید.

  6. اختیاری: انحراف انقضا را پیکربندی کنید. مقداری وارد کنید و واحدی (روز، ساعت، دقیقه، یا ثانیه) انتخاب کنید. به‌طور پیش‌فرض، انحراف ۰ است.

  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 برای ۷ روز یا 24h برای ۲۴ ساعت. اگر این پرچم را حذف کنید، انحراف انقضا به‌طور پیش‌فرض روی ۰ تنظیم می‌شود.

مدت ایجاد شاخص 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. برای پیکربندی نمایه TTL، از فرمان firestore fields ttls list استفاده کنید. فرمان زیر همه شاخص‌های TTL را فهرست می‌کند.

    gcloud firestore fields ttls list
    

    برای فهرست کردن نمایه‌های TTL در مجموعه‌ای خاص، از این استفاده کنید:

    gcloud firestore fields ttls list  --collection-group=collection_name
    

مشاهده جزئیات عملیات

برای مشاهده جزئیات بیشتر درباره نمایه TTL که در وضعیت CREATING قرار دارد، می‌توانید از gcloud CLI استفاده کنید.

برای دیدن همه عملیات‌های درحال اجرا و عملیات‌هایی که اخیراً تکمیل شده‌اند، از فرمان 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 API از نام روش 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. برای پیکربندی نمایه TTL، از فرمان firestore fields ttls update استفاده کنید. پرچم --async را اضافه کنید تا gcloud CLI منتظر تکمیل عملیات نماند.

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

پایش حذف‌های TTL

می‌توانید از Cloud Monitoring برای مشاهده سنجه‌های مربوط به حذف‌های مبتنی بر TTL استفاده کنید. ‫Cloud Firestore سنجه‌های زیر را برای TTL ارائه می‌دهد:

نوع سنجه نام سنجه شرح سنجه
firestore.googleapis.com/document/ttl_deletion_count تعداد حذف‌های زنده

تعداد کل اسناد حذف‌شده توسط نمایه‌های TTL.

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays تأخیرهای انقضای زمان زنده تا حذف

زمان سپری‌شده بین زمانی که سند تحت نمایه TTL منقضی شده است و زمانی که واقعاً حذف شده است.

برای راه‌اندازی داشبورد با Cloud Firestore معیار، مدیریت داشبورد سفارشی و افزودن ابزاره‌های داشبورد را ببینید.