בדף הזה מוסבר איך להגדיר אינדקסים של זמן חיים (TTL) באמצעות MongoDB API, מסוף Google Cloud ו-Google Cloud CLI.
סקירה כללית של זמן חיים (TTL)
כדי להסיר באופן אוטומטי נתונים ישנים ממסדי הנתונים, השתמשו באינדקסים של TTL. אינדקס TTL מגדיר שדה מסוים כזמן התפוגה של מסמכים באוסף נתון. בעזרת TTL אפשר להפחית את עלויות האחסון על ידי ניקוי נתונים מיושנים. בדרך כלל הנתונים נמחקים תוך 24 שעות אחרי מועד התפוגה שלהם.
תמחור
פעולות מחיקה של TTL משתמשות ביחידות מחיקה מנוהלות. למידע על מחירים, ראו התמחור של מהדורת Enterprise של Cloud Firestore.
מגבלות ואילוצים
- אפשר ליצור רק אינדקס TTL אחד לכל אוסף.
- אפשר להגדיר עד 500 אינדקסים של TTL.
מחיקת TTL
שימו לב להתנהגויות העיקריות הבאות של מחיקה מבוססת-TTL:
מחיקה באמצעות TTL היא לא תהליך מיידי. מסמכים שפג תוקפם ממשיכים להופיע בשאילתות ובבקשות חיפוש עד שתהליך ה-TTL מוחק אותם בפועל. ה-TTL מחליף את העמידה בזמנים של מחיקת הנתונים לטובת עלות בעלות כוללת (TCO) נמוכה יותר למחיקות. בדרך כלל הנתונים נמחקים תוך 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
בניגוד לאינדקסים אחרים של 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.
במאמר תפקידים בניהול הזהויות והרשאות הגישה (IAM) ב-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 API, שם ה-method הוא
google.firestore.admin.v1.FirestoreAdmin.UpdateField.
Google Cloud Console
נכנסים לדף Databases במסוף Google Cloud.
בוחרים את מסד הנתונים הרצוי מרשימת מסדי הנתונים.
בתפריט הניווט, לוחצים על Time-to-live.
לוחצים על יצירת מדיניות.
מזינים שם של אוסף ושם של שדה חותמת זמן.
אופציונלי: מגדירים היסט תפוגה. מזינים ערך ובוחרים יחידה (ימים, שעות, דקות או שניות). כברירת מחדל, ההיסט הוא 0.
לוחצים על יצירה.
המסוף חוזר לדף Time-to-live. אם הפעולה מתחילה, הדף מוסיף רשומה לטבלת האינדקסים של TTL. אם הפעולה נכשלת, מוצגת בדף הודעת שגיאה.
gcloud
משתמשים בפקודה
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
כדי לראות אינדקסים של TTL, משתמשים ב-method listIndexes(). לדוגמה:
db.restaurants.listIndexes()
שימו לב שהפלט יכלול גם אינדקסים של TTL וגם אינדקסים שהם לא של TTL. אינדקסים של TTL יכללו את האפשרות expireAfterSeconds.
Google Cloud Console
נכנסים לדף Databases במסוף Google Cloud.
בוחרים את מסד הנתונים הרצוי מרשימת מסדי הנתונים.
בתפריט הניווט, לוחצים על Time-to-live.
במסוף מוצגת רשימה של אינדקסי TTL של מסד הנתונים, כולל הסטטוס של כל אינדקס.
gcloud
משתמשים בפקודה
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
משתמשים ב-method 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
נכנסים לדף Databases במסוף Google Cloud.
בוחרים את מסד הנתונים הרצוי מרשימת מסדי הנתונים.
בתפריט הניווט, לוחצים על Time-to-live.
בטבלת האינדקסים של TTL, מוצאים את השורה של אינדקס ה-TTL. בשורה הזו בטבלה, לוחצים על הכפתור Delete (סמל פח האשפה).
לוחצים על מחיקה כדי לאשר את הפעולה.
המסוף חוזר לדף Time-to-live. אם הפעולה מצליחה, Cloud Firestore מסיר את אינדקס ה-TTL מהטבלה.
gcloud
משתמשים בפקודה
firestore fields ttls updateכדי להגדיר אינדקס TTL. מוסיפים את הדגל--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) |
המספר הכולל של מסמכים שנמחקו על ידי אינדקסים של TTL. |
| firestore.googleapis.com/document/ttl_expiration_to_deletion_delays | עיכובים במחיקה של פריטים שפג תוקפם |
הזמן שחלף בין מועד התפוגה של מסמך לפי אינדקס TTL לבין המועד שבו הוא נמחק בפועל. |
כדי להגדיר לוח בקרה עם מדדי Cloud Firestore, קראו את המאמרים ניהול לוחות בקרה בהתאמה אישית והוספת ווידג'טים ללוח הבקרה.