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

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

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

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

למידע נוסף, קראו את הקטע מתי הנתונים נמחקים במאמר הזה.

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

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

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

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

חותמות זמן

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

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

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

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

סוגי איסוף אשפה

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

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

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

מספר הגרסאות

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

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

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

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

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

צומת

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

Union

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

מוטמע

מדיניות איסוף אשפה מקוננת כוללת שילוב של כללי איחוד וכללי צומת.

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

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

מדיניות HBase

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

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

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

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

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

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

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

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

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

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

רפליקציה ואיסוף (garbage collection)

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

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

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

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

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

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

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

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

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

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

הארכת משך השמירה

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

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

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

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