ניהול שמירת נתונים באמצעות אינדקסים של TTL

בדף הזה מוסבר איך להשתמש ב-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

  1. נכנסים לדף Databases במסוף Google Cloud.

    לדף Databases

  2. בוחרים את מסד הנתונים הרצוי מרשימת מסדי הנתונים.

  3. בתפריט הניווט, לוחצים על Time-to-live (זמן החיים).

  4. לוחצים על יצירת מדיניות.

  5. מזינים שם לאוסף ושם של שדה חותמת הזמן.

  6. לוחצים על יצירה.

המסוף חוזר לדף Time-to-live. אם הפעולה מתחילה בהצלחה, הדף מוסיף רשומה לטבלה של אינדקסים של TTL. אם הפעולה נכשלת, מוצגת הודעת שגיאה בדף.

gcloud

  1. מתקינים ומפעילים את gcloud CLI CLI.

  2. משתמשים בפקודה 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

  1. נכנסים לדף Databases במסוף Google Cloud.

    לדף Databases

  2. בוחרים את מסד הנתונים הרצוי מרשימת מסדי הנתונים.

  3. בתפריט הניווט, לוחצים על Time-to-live (זמן החיים).

במסוף מופיעים אינדקסים של TTL למסד הנתונים, כולל הסטטוס של כל אינדקס.

gcloud

  1. מתקינים ומפעילים את gcloud CLI CLI.

  2. משתמשים בפקודה 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

  1. נכנסים לדף Databases במסוף Google Cloud.

    לדף Databases

  2. בוחרים את מסד הנתונים הרצוי מרשימת מסדי הנתונים.

  3. בתפריט הניווט, לוחצים על Time-to-live (זמן החיים).

  4. בטבלת אינדקס ה-TTL, מוצאים את השורה של אינדקס ה-TTL. בשורה הזו בטבלה, לוחצים על הלחצן מחיקה (סמל פח האשפה).

  5. לוחצים על מחיקה כדי לאשר את הפעולה.

המסוף חוזר לדף Time-to-live. אם הפעולה מצליחה, ‫Cloud Firestore מסיר את אינדקס ה-TTL מהטבלה.

gcloud

  1. מתקינים ומפעילים את gcloud CLI CLI.

  2. משתמשים בפקודה 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 מדדים, אפשר לעיין במאמרים ניהול לוחות בקרה בהתאמה אישית והוספת ווידג'טים ללוח הבקרה.