סקירה כללית של איסוף אשפה

דף זה מתאר כיצד איסוף אשפה פועל ב-Bigtable ומכסה את הנושאים הבאים:

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

סקירה כללית על garbage collection

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

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

מידע נוסף זמין בקטע מתי נתונים נמחקים במסמך הזה.

היתרונות של מדיניות איסוף אשפה כוללים את הדברים הבאים:

  • מצמצמים את גודל השורה – תמיד כדאי למנוע משורות לגדול ללא הגבלה. שורות גדולות משפיעות לרעה על הביצועים. מומלץ לא להגדיל את השורה מעבר לגודל של 100MB, והמגבלה היא 256MB. אם אתם לא צריכים לשמור נתונים היסטוריים או גרסאות קודמות של הנתונים הנוכחיים, אתם יכולים להשתמש במנגנון איסוף כדי לצמצם את הגודל של כל שורה.
  • חסכו בעלויות - פינוי אשפה מבטיח שלא תשלמו על אחסון נתונים שכבר אינם נחוצים או אינם בשימוש. תחויב עבור אחסון נתונים שפג תוקפם או נתונים מיושנים עד להתרחשות דחיסה ונתונים הזכאים לאיסוף פסולת יימחקו. בדרך כלל התהליך הזה נמשך כמה ימים, אבל הוא יכול להימשך עד שבוע.

ניתן להגדיר מדיניות איסוף אשפה באופן תכנותי או באמצעות cbt ממשק שורת פקודה (CLI) . מדיניות איסוף אשפה נקבעת ברמת העמודה [משפחה].

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

חותמות זמן

ב-Bigtable, הצומת של שורה ועמודה יכול להכיל כמה תאים, שמכילים גרסאות עם חותמת זמן של הערך של הצומת הזה. לכל תא יש חותמת זמן. חותמת זמן היא מספר המיקרו-שניות מאז ראשית זמן יוניקס, 1970-01-01 00:00:00 UTC. אתם יכולים להשתמש בחותמות הזמן שמוגדרות כברירת מחדל או להגדיר אותן כשאתם שולחים בקשות כתיבה.

חותמת זמן ששולחים ל-Bigtable צריכה להיות ערך במיקרו-שנייה עם דיוק של מילי-שנייה לכל היותר. חותמת זמן עם דיוק של מיקרו-שנייה, כמו 3023483279876543, נדחית. בדוגמה הזו, ערך חותמת הזמן הקביל הוא 3023483279876000.

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

חשוב להגדיר חותמת זמן כברירת מחדל כששולחים בקשות כתיבה, אלא אם אתם צריכים לתמוך בתרחיש שימוש עם חותמות זמן מלאכותיות.

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

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

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

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

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

שכפול ומנגנון איסוף

שכפול יכול להשפיע על איסוף אשפה בכמה דרכים.

איסוף מבוסס-גרסה ושימוש במעבד

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

לעומת זאת, מנגנון איסוף מבוסס-גיל לא מגדיל את השימוש במעבד במופעים משוכפלים.

שינוי מדיניות מנגנון איסוף שמבוססת על גרסה

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

שינוי מדיניות איסוף אשפה מבוססת גיל

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

קיצור תקופת השמירה

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

הארכת תקופת השמירה

בטבלה משוכפלת, ניתן להגדיל את זמן השמירה של מדיניות איסוף אשפה ב-90 יום לכל היותר.

אם מגדילים את תקופת השמירה של קבוצת עמודות, צריך לזכור שהאשכולות עשויים להיות לא מסונכרנים למשך יותר משבוע. כדי להבין למה, נניח שיש לכם טבלה במופע של שני אשכולות, ואתם משנים את תקופת השמירה של משפחת עמודות מ-30 ימים ל-50 ימים:

  1. בקשת כתיבה למפתח השורה ip#685 נשלחת לאשכול א' עם הערך 2023-01-02 לעמודה click-through במשפחת העמודות profile. הנתונים משוכפלים לאשכול ב'.
  2. אחרי 31 ימים, מתבצע מנגנון איסוף באשכול א', והערך בעמודה click-through מזוהה כערך שתוקפו פג ונמחק.
  3. אתם משנים את מנגנון איסוף הזבל של קבוצת העמודות profile, ומגדילים את ה-TTL מ-30 ימים ל-50 ימים.
  4. יום לאחר מכן, איסוף האשפה פועל באשכול B. ערך ה-TTL הוא 50 ימים, לכן הערך 2023-01-02 נשמר.
  5. האשכולות לא מסונכרנים עכשיו, והמצב הזה יימשך כמעט 20 ימים עד שהערך שקיים באשכול ב' אבל לא באשכול א' יימחק סופית.

המאמרים הבאים