בדף הזה מוסבר איך להשתמש ב-MongoDB API, במסוף Google Cloud וב-Google Cloud CLI כדי להגדיר אינדקסים של זמן חיים (TTL).
סקירה כללית של אורך חיים (TTL)
אפשר להשתמש באינדקסים של TTL כדי להסיר באופן אוטומטי נתונים לא עדכניים ממסדי הנתונים. אינדקס TTL מציין שדה מסוים כזמן התפוגה של מסמכים באוסף נתון. בעזרת TTL, אפשר להקטין את עלויות האחסון על ידי ניקוי נתונים לא רלוונטיים. הנתונים נמחקים בדרך כלל תוך 24 שעות אחרי תאריך התפוגה שלהם.
תמחור
פעולות מחיקה של TTL נכללות בעלויות המחיקה של המסמכים. למידע על תמחור של פעולות מחיקה, אפשר לעיין בCloud Firestoreתמחור של מהדורת Enterprise.
מגבלות ואילוצים
- אפשר ליצור רק אינדקס TTL אחד לכל אוסף.
- אפשר להגדיר עד 500 אינדקסים של TTL.
מחיקה של TTL
חשוב לשים לב להתנהגויות העיקריות הבאות של מחיקה שמבוססת על TTL:
מחיקה באמצעות TTL היא לא תהליך מיידי. מסמכים שתוקפם פג ממשיכים להופיע בשאילתות ובבקשות חיפוש עד שתהליך ה-TTL מוחק אותם בפועל. TTL מחליף את עיתוי המחיקה ביתרון של עלות הבעלות הכוללת (TCO) מופחתת עבור מחיקות. הנתונים נמחקים בדרך כלל תוך 24 שעות אחרי תאריך התפוגה שלהם.
יצירת אינדקס TTL באוסף קיים גורמת למחיקה בכמות גדולה של כל הנתונים שתוקף השימוש בהם פג, בהתאם לאינדקס ה-TTL החדש. הערה: גם מחיקה בכמות גדולה לא מתבצעת באופן מיידי, והיא תלויה בכמות הנתונים שקיימים באוסף הזה.
אם במסמך מוגדר זמן תפוגה בעבר ואתם מוסיפים אינדקס TTL חדש לאוסף, המסמך יימחק תוך 24 שעות מסיום ההגדרה של אינדקס ה-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, פועלים לפי השלבים הבאים:
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 (זמן החיים).
לוחצים על יצירת מדיניות.
מזינים שם לאוסף ושם של שדה חותמת הזמן.
לוחצים על יצירה.
המסוף חוזר לדף 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
גם במסד נתונים ריק, יכול להיות שיעברו עשר דקות או יותר עד שייווצר אינדקס TTL. אחרי שמתחילים פעולה, סגירת הטרמינל לא מבטלת את הפעולה.
צפייה באינדקסים של TTL
כדי לראות את האינדקסים של TTL, פועלים לפי השלבים הבאים:
MongoDB API
משתמשים בשיטה listIndexes() כדי להציג אינדקסים של TTL. לדוגמה:
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. בשורה הזו בטבלה, לוחצים על הלחצן מחיקה (סמל פח האשפה).
לוחצים על מחיקה כדי לאשר את הפעולה.
המסוף חוזר לדף 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) |
הזמן שחלף בין המועד שבו תוקף המסמך פג במסגרת אינדקס TTL לבין המועד שבו הוא נמחק בפועל. |
כדי להגדיר לוח בקרה עם Cloud Firestore מדדים, אפשר לעיין במאמרים ניהול לוחות בקרה בהתאמה אישית והוספת ווידג'טים ללוח הבקרה.