סקירה כללית של Garbage collection

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

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

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

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

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

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

אפשר להגדיר מדיניות של איסוף אשפה באופן פרוגרמטי או באמצעות cbt CLI . מדיניות איסוף האשפה מוגדרת ברמת משפחת העמודות.

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

חותמות זמן

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

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

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

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

סוגים של garbage collection

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

ערכים שתוקפם עומד לפוג (מבוסס-גיל)

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

מספר הגרסאות

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

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

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

שילובים של כללי תפוגה ומספרי גרסאות

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

צומת

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

Union

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

מוטמע

מדיניות nested garbage collection היא שילוב של כללי איחוד וכללי חיתוך.

הגדרות ברירת מחדל לאיסוף נתונים

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

מדיניות HBase

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

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

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

מתי הנתונים נמחקים

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

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

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

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

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

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

שכפול ו-garbage collection

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

איסוף אשפה ושימוש במעבד (CPU) על סמך גרסה

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

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

שינוי מדיניות איסוף האשפה (garbage collection) שמבוססת על גרסה

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

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

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

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

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

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

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

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

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

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