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