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