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

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

مرور کلی زمان پخش زنده

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

قیمت‌گذاری

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

محدودیت‌ها و قیود

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

حذف TTL

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

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

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

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

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

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

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

  • Cloud Firestore فقط زمانی یک سند را منقضی می‌کند که فیلد TTL روی مقدار Date and time / BSON Date یا یک مقدار Array حاوی مقدار Date and time / BSON Date تنظیم شده باشد. برای غیرفعال کردن انقضاها بر اساس هر سند، فیلد را خالی بگذارید یا روی مقداری مانند null تنظیم کنید.

  • TTL به گونه‌ای طراحی شده است که تأثیر بر سایر فعالیت‌های پایگاه داده را به حداقل برساند. حذف‌های ناشی از TTL با اولویت پایین‌تری در نظر گرفته می‌شوند. استراتژی‌های دیگری نیز برای کاهش افزایش ناگهانی ترافیک ناشی از حذف‌های ناشی از TTL وجود دارد.

فیلدهای TTL و شاخص‌های غیر 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 مراجعه کنید.

قبل از اینکه شروع کنی

قبل از استفاده از gcloud CLI برای مدیریت شاخص‌های TTL، از دستور gcloud components update برای به‌روزرسانی اجزا به آخرین نسخه موجود استفاده کنید:

gcloud components update

ایجاد یک شاخص TTL

وقتی یک شاخص TTL ایجاد می‌کنید، یک فیلد سند را به عنوان زمان انقضای اسناد در یک مجموعه تعیین می‌کنید.

TTL از یک فیلد مشخص برای شناسایی اسنادی که واجد شرایط حذف هستند استفاده می‌کند. فیلد TTL باید روی یک مقدار Timestamp / BSON Date یا یک مقدار Array حاوی مقدار Timestamp / BSON Date تنظیم شود. می‌توانید فیلدی را که از قبل وجود دارد انتخاب کنید یا می‌توانید فیلدی را که قصد دارید بعداً اضافه کنید، تعیین کنید.

قبل از تنظیم مقدار فیلد TTL موارد زیر را در نظر بگیرید:

  • مقدار فیلد TTL می‌تواند زمانی در آینده، حال یا گذشته باشد. اگر مقدار زمانی در گذشته باشد، سند بلافاصله واجد شرایط حذف است. برای مثال، می‌توانید یک اندیس TTL با فیلد expireAt ایجاد کنید که سپس آن را به اسناد موجود اضافه کنید.

  • استفاده از هر نوع داده دیگری یا تنظیم نکردن مقدار فیلد TTL، TTL را برای هر سند غیرفعال می‌کند.

برای ایجاد یک شاخص TTL، مراحل زیر را دنبال کنید:

رابط برنامه‌نویسی کاربردی مونگودی‌بی

هنگام فراخوانی متد createIndex() گزینه‌ی ایندکس expireAfterSeconds نیز لحاظ کنید:

db.COLLECTION_NAME.createIndex({"TTL_FIELD": 1, "expireAfterSeconds": EXPIRATION_OFFSET_SECONDS})

برای مثال:

db.restaurants.createIndex({"ts": 1, "expireAfterSeconds": 3600})

expireAfterSeconds مقدار TTL را به عنوان یک شاخص TTL شناسایی می‌کند و فاصله بین مقدار timestamp از فیلد TTL و زمان انقضا است. اگر expireAfterSeconds روی 0 تنظیم شود، زمان انقضا مستقیماً توسط مقدار timestamp از فیلد TTL تعیین می‌شود.

به محدودیت‌های زیر توجه کنید:

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

کنسول ابری گوگل

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

    به پایگاه‌های داده بروید

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

  3. در منوی پیمایش، روی «زمان پخش زنده» کلیک کنید.

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

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

  6. روی ایجاد کلیک کنید.

کنسول به صفحه‌ی «زمان حیات» (Time-to-live) برمی‌گردد. اگر عملیات با موفقیت شروع شود، صفحه یک ورودی به جدول اندیس‌های TTL اضافه می‌کند. در صورت عدم موفقیت، صفحه یک پیام خطا نمایش می‌دهد.

جی‌کلاود

  1. gcloud CLI را نصب و راه‌اندازی کنید .

  2. از دستور firestore fields ttls update برای پیکربندی شاخص TTL استفاده کنید. برای جلوگیری از انتظار gcloud CLI برای تکمیل عملیات، پرچم --async را اضافه کنید.

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

مدت زمان ایجاد شاخص TTL

حتی در یک پایگاه داده خالی، ایجاد یک شاخص TTL می‌تواند ده دقیقه یا بیشتر طول بکشد. وقتی عملیاتی را شروع می‌کنید، بستن ترمینال، عملیات را لغو نمی‌کند.

مشاهده شاخص‌های TTL

برای مشاهده شاخص‌های TTL، مراحل زیر را دنبال کنید:

رابط برنامه‌نویسی کاربردی مونگودی‌بی

برای مشاهده اندیس‌های TTL از متد listIndexes() استفاده کنید. برای مثال:

db.restaurants.listIndexes()

توجه داشته باشید که خروجی شامل هر دو شاخص TTL و غیر TTL خواهد بود. شاخص‌های TTL شامل گزینه expireAfterSeconds خواهند بود.

کنسول ابری گوگل

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

    به پایگاه‌های داده بروید

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

  3. در منوی پیمایش، روی «زمان پخش زنده» کلیک کنید.

کنسول، فهرستی از شاخص‌های TTL برای پایگاه داده شما و وضعیت هر شاخص را نمایش می‌دهد.

جی‌کلاود

  1. gcloud CLI را نصب و راه‌اندازی کنید .

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

رابط برنامه‌نویسی کاربردی مونگودی‌بی

برای حذف یک اندیس TTL از متد dropIndex() استفاده کنید. برای مثال:

حذف شاخص TTL با استفاده از نام شاخص

db.restaurants.dropIndex("ts_1")

حذف شاخص TTL با استفاده از تعریف شاخص

db.restaurants.dropIndex({"ts": 1})

توجه داشته باشید که لاگ‌های حسابرسی برای حذف یک شاخص TTL با MongoDB API از متدی با نام google.firestore.admin.v1.FirestoreAdmin.UpdateField استفاده می‌کنند.

کنسول ابری گوگل

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

    به پایگاه‌های داده بروید

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

  3. در منوی پیمایش، روی «زمان پخش زنده» کلیک کنید.

  4. در جدول شاخص TTL، ردیف مربوط به شاخص TTL را پیدا کنید. در این ردیف جدول، روی دکمه حذف (سطل زباله) کلیک کنید.

  5. با کلیک روی «حذف» تأیید کنید.

کنسول به صفحه زمان اجرا (Time-to-live) برمی‌گردد. در صورت موفقیت، Cloud Firestore شاخص TTL را از جدول حذف می‌کند.

جی‌کلاود

  1. gcloud CLI را نصب و راه‌اندازی کنید .

  2. از دستور firestore fields ttls update برای پیکربندی شاخص TTL استفاده کنید. برای جلوگیری از انتظار gcloud CLI برای تکمیل عملیات، پرچم --async را اضافه کنید.

    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 ، به مدیریت داشبورد سفارشی و افزودن ابزارک‌های داشبورد مراجعه کنید.