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

בדף הזה נסביר איך להשתמש במסוף Google Cloud וב-Google Cloud CLI כדי להגדיר מדיניות זמן חיים (TTL). לפני שתקראו את הדף הזה, כדאי להבין את מודל הנתונים של Cloud Firestore.

סקירה כללית על זמן החיים

תוכלו להשתמש במדיניות TTL כדי להסיר באופן אוטומטי נתונים לא פעילים ממסדי הנתונים. מדיניות TTL מציינת שדה מסוים כזמן התפוגה של מסמכים בקבוצת אוספים נתונה. באמצעות TTL אפשר להוזיל את עלויות האחסון על ידי ניקוי נתונים ישנים. הנתונים נמחקים בדרך כלל תוך 24 שעות מתאריך התפוגה שלהם.

תמחור

פעולות מחיקה של TTL נכללות בעלויות המחיקה של המסמכים. למידע על התמחור של פעולות מחיקה, ראו תמחור של Cloud Firestore.

מגבלות ואילוצים

  • אפשר לסמן רק שדה אחד לכל קבוצת אוספים בתור שדה TTL.
  • מותרות בסך הכול 200 הגדרות ברמת השדה. הגדרת שדה אחת יכולה להכיל כמה הגדרות לאותו שדה. לדוגמה, החרגה להוספה של שדה יחיד לאינדקס ומדיניות TTL באותו שדה נספרות כהגדרה אחת של שדה במסגרת המגבלה.
  • ללקוחות במצב Firestore במצב Datastore, לא ניתן להשתמש ב-TTL עם מצב בו-זמניות (concurrency) עם אופטימיזציה של קבוצות ישויות. כדאי לשקול לשנות את סטטוס 'מצב בו-זמניות' למצב בו-זמניות אופטימיסטי.

מחיקת TTL

חשוב לשים לב להתנהגויות העיקריות הבאות של מחיקה מבוססת-TTL:

  • המחיקה באמצעות TTL היא לא תהליך מיידי. מסמכים שפג תוקפם ממשיכים להופיע בשאילתות ובבקשות לחיפוש עד שהם נמחקים בפועל בתהליך TTL. כשמשתמשים ב-TTL, מאבדים את היתרון של מחיקה מיידית, אבל מקבלים עלות בעלות כוללת נמוכה יותר של המחיקה. הנתונים נמחקים בדרך כלל תוך 24 שעות ממועד התפוגה שלהם.

  • מחיקת מסמך באמצעות TTL לא מוחקת אוספי משנה של המסמך הזה.

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

  • אם למסמך יש תאריך תפוגה שחל בעבר ואתם מוסיפים לקטגוריה מדיניות TTL חדשה, המסמך יימחק תוך 24 שעות ממועד סיום ההגדרה של מדיניות ה-TTL והפעלתה שלה.

  • TTL לא תמיד מחק מסמכים באותו סדר שבו חותמות הזמן שלהם לתפוגה מופיעות.

  • המחיקה לא מתבצעת באופן טרנזקציוני. מסמכים עם אותו מועד תפוגה לא נמחקים בהכרח באותו זמן. אם אתם זקוקים להתנהגות הזו, תוכלו לבצע את המחיקה באמצעות ספריית לקוח.

  • כדי לקבוע את תאריך התפוגה, Cloud Firestore תמיד יפעל בהתאם לשדה ה-TTL העדכני ביותר. לדוגמה, אם שדה ה-TTL של מסמך שתוקפו פג אבל עדיין לא נמחק, עודכן לתאריך מאוחר יותר, המסמך לא יפוג וייעשה שימוש בתאריך החדש.

  • TTL נועד לצמצם את ההשפעה על פעילויות אחרות של מסדי נתונים. מחיקה שמבוססת על TTL מקבלת עדיפות נמוכה יותר. יש גם אסטרטגיות אחרות שנועדו למנוע עליות חדות בתנועה שנובעות מחיסומים שמבוססים על TTL.

  • מחיקה באמצעות TTL מפעילה את כל המאזינים הפעילים של קובצי snapshot ומפעילה טריגרים של Cloud Functions Cloud Firestore.

שדות ואינדיקטורים של TTL

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

כברירת מחדל, הפונקציה Cloud Firestore יוצרת אינדקס של שדה יחיד לכל השדות. אפשר ליצור החרגה של שדה אחד מהוספה לאינדקס כדי להשבית את ההוספה לאינדקס של שדה TTL.

הרשאות

לחשבון המשתמש שמגדיר מדיניות TTL נדרשת ההרשאה הבאה בפרויקט:

  • כדי להציג את המדיניות של TTL צריך את ההרשאות datastore.indexes.list ו-datastore.indexes.get.
  • כדי לשנות את כללי מדיניות ה-TTL צריך את ההרשאה datastore.indexes.update.
  • כדי לבדוק את הסטטוס של פעולות TTL, צריך את datastore.operations.list ו-datastore.operations.get.

במאמר Cloud Firestore תפקידים של ניהול זהויות והרשאות גישה מפורט מידע על התפקידים שמקצים את ההרשאות האלה.

לפני שמתחילים

לפני שמשתמשים ב-CLI של gcloud כדי לנהל מדיניות TTL, צריך להשתמש בפקודה gcloud components update כדי לעדכן את הרכיבים לגרסה האחרונה הזמינה:

gcloud components update

יצירת מדיניות TTL

כשיוצרים מדיניות TTL, מקצים שדה במסמך כזמן התפוגה של מסמכים בקבוצת אוספים.

TTL משתמש בשדה מסוים כדי לזהות מסמכים שעומדים בדרישות למחיקה. שדה ה-TTL הזה חייב להיות מסוג Date and time. תוכלו לבחור שדה שכבר קיים או להקצות שדה שמתכננים להוסיף מאוחר יותר.

לפני שמגדירים את הערך בשדה TTL, כדאי להביא בחשבון את הדברים הבאים:

  • הערך בשדה TTL יכול להיות זמן בעתיד, עכשיו או בעבר. אם מדובר בתאריך של זמן שכבר חלף, המסמך יהיה זמין למחיקה באופן מיידי. לדוגמה, אפשר ליצור מדיניות TTL עם השדה expireAt, ולאחר מכן להוסיף אותה למסמכים קיימים.

  • שימוש בסוג נתונים אחר או אי הגדרה של ערך השדה TTL משביתים את TTL במסמך הספציפי.

כדי ליצור מדיניות TTL, יש לבצע את השלבים הבאים:

Google Cloud Console

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

    כניסה לדף Databases

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

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

  4. לוחצים על Create Policy.

  5. מזינים שם לקבוצת האוספים ושם לשדה חותמת הזמן.

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

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

gcloud

משתמשים בפקודה firestore fields ttls update כדי להגדיר מדיניות TTL. מוסיפים את הדגל --async כדי למנוע מה-CLI של gcloud להמתין לסיום הפעולה.

 gcloud firestore fields ttls update
  ttl_field --collection-group=collection_group_name
  --enable-ttl 

משך ההפעלה של מדיניות TTL

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

הצגת כללי המדיניות בנושא TTL

כדי להציג את כללי המדיניות של TTL ואת הסטטוסים שלהם, פועלים לפי השלבים הבאים:

Google Cloud Console

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

    לדף Databases

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

  3. בתפריט הניווט, לוחצים על 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_group_name
   

צפייה בפרטי הפעולה

ב-CLI של gcloud אפשר לראות פרטים נוספים על מדיניות TTL במצב CREATING.

משתמשים בפקודה operations list כדי לראות את כל הפעולות שפועלות ופעולות שהושלמו לאחרונה:

gcloud firestore operations list

התשובה כוללת הערכה של התקדמות הפעולה.

השבתת מדיניות TTL

כדי להשבית מדיניות TTL:

Google Cloud Console

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

    לדף Databases

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

  3. בתפריט הניווט, לוחצים על משך חיים.

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

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

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

gcloud

1. משתמשים בפקודה firestore fields ttls update כדי להגדיר מדיניות TTL. מוסיפים את הדגל --async כדי למנוע מה-CLI של gcloud להמתין לסיום הפעולה.

   gcloud firestore fields ttls update ttl_field --collection-group=collection_group_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.