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

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

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

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

תמחור

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

מגבלות ומגבלות

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

מחיקת 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 תפקידים של ניהול זהויות והרשאות גישה (IAM).

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

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

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

במסוף מוצגות כללי המדיניות של 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. בתפריט הניווט, לוחצים על Time-to-live.

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

  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)

המספר הכולל של מסמכים שנמחקו לפי מדיניות TTL.

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays תפוגת זמן חיים לעיכובים במחיקה

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

במאמרים ניהול לוח בקרה בהתאמה אישית והוספת ווידג'טים למרכז הבקרה מוסבר איך מגדירים מרכז בקרה עם מדדי Cloud Firestore.