این صفحه نحوه استفاده از 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
در کنسول Google Cloud، به صفحه پایگاههای داده بروید.
پایگاه داده موردنیاز را از فهرست پایگاههای داده انتخاب کنید.
در منوِ پیمایش، روی زمان زنده بودن کلیک کنید.
روی ایجاد خطمشی کلیک کنید.
نام مجموعه و نام فیلد مُهر زمان را وارد کنید.
اختیاری: انحراف انقضا را پیکربندی کنید. مقداری وارد کنید و واحدی (روز، ساعت، دقیقه، یا ثانیه) انتخاب کنید. بهطور پیشفرض، انحراف ۰ است.
روی ایجاد کردن کلیک کنید.
کنسول به صفحه زمان زنده بودن برمیگردد. اگر عملیات با موفقیت شروع شود، صفحه ورودیای به جدول شاخصهای TTL اضافه میکند. درصورت عدم موفقیت، صفحه پیام خطایی نمایش میدهد.
gcloud
gcloud CLI CLI را نصب و مقداردهی اولیه کنید.
از فرمان
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
در کنسول Google Cloud، به صفحه پایگاههای داده بروید.
پایگاه داده موردنیاز را از فهرست پایگاههای داده انتخاب کنید.
در منوِ پیمایش، روی زمان زنده بودن کلیک کنید.
کنسول فهرست شاخصهای TTL را برای پایگاه دادهتان نشان میدهد و وضعیت هر شاخص را نشان میدهد.
gcloud
gcloud CLI CLI را نصب و مقداردهی اولیه کنید.
برای پیکربندی نمایه 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
در کنسول Google Cloud، به صفحه پایگاههای داده بروید.
پایگاه داده موردنیاز را از فهرست پایگاههای داده انتخاب کنید.
در منوِ پیمایش، روی زمان زنده بودن کلیک کنید.
در جدول نمایه TTL، ردیف مربوط به نمایه TTL را پیدا کنید. در این ردیف جدول، روی دکمه حذف (سطل زباله) کلیک کنید.
با کلیک کردن روی حذف تأیید کنید.
کنسول به صفحه زمان زنده بودن برمیگردد. درصورت موفقیت، Cloud Firestore نمایه TTL را از جدول برمیدارد.
gcloud
gcloud CLI CLI را نصب و مقداردهی اولیه کنید.
برای پیکربندی نمایه 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 معیار، مدیریت داشبورد سفارشی و افزودن ابزارههای داشبورد را ببینید.