עיצוב סכימה לנתונים של סדרות זמנים
בדף הזה מתוארות תבניות עיצוב של סכימות לאחסון נתונים של סדרות עתיות ב-Bigtable. הדף הזה מתבסס על תכנון הסכימה, ומניח שאתם מכירים את המושגים וההמלצות שמתוארים בדף הזה.
סדרת נתונים בזמן היא אוסף של נתונים שמורכב ממדידות ומהזמנים שבהם המדידות תועדו. דוגמאות לסדרות זמנים:
- תרשים השימוש בזיכרון במחשב
- טמפרטורה לאורך זמן בדיווח חדשותי
- מחירי מניות לאורך זמן
סכימה טובה מובילה לביצועים מצוינים וליכולת התאמה לעומס, וסכימה גרועה יכולה להוביל למערכת עם ביצועים נמוכים. עם זאת, אין עיצוב סכימה אחד שמתאים לכל תרחישי השימוש.
התבניות שמתוארות בדף הזה הן נקודת התחלה. כשמתכננים סכימה לנתוני סדרת זמנים, הדברים הכי חשובים שצריך להביא בחשבון הם קבוצת הנתונים הייחודית והשאילתות שבהן מתכננים להשתמש.
אלה דפוסי התכנון הבסיסיים לאחסון נתונים של סדרות זמנים ב-Bigtable:
נתונים לדוגמה
כדי להמחיש את ההבדלים בין התבניות, הדוגמאות בדף הזה מבוססות על ההנחה שאתם מאחסנים נתונים של אפליקציה שמתעדת את המדידות של בלוני מזג אוויר פעם בדקה. אנחנו משתמשים במונח אירוע כדי לתאר בקשה אחת שכותבת תא אחד או כמה תאים בו-זמנית. מזהי המיקומים תואמים לאזורים של Google Cloud .
| מדידה | דוגמה |
|---|---|
|
|
| לחץ (פסקלים) | 94587 |
| טמפרטורה (צלזיוס) | 9.5 |
| לחות (אחוזים) | 65 |
| גובה (במטרים) | 601 |
| נתונים קשורים | דוגמה |
| מזהה הבלון | 3698 |
| מיקום | asia-southeast1 |
| חותמת זמן1 | t2021-03-05-1204 |
קטגוריות זמן
בתבנית של קטגוריית זמן, כל שורה בטבלה מייצגת "קטגוריה" של זמן, כמו שעה, יום או חודש. מפתח שורה כולל מזהה שהוא לא חותמת זמן, כמו week49, לתקופה שמתועדת בשורה, יחד עם נתונים מזהים אחרים.
גודל הקטגוריה שבה משתמשים (למשל דקה, שעה או יום) תלוי בשאילתות שבהן מתכננים להשתמש ובמגבלות גודל הנתונים של Bigtable. לדוגמה, אם שורות שמכילות נתונים של שעה אחת גדולות מהגודל המקסימלי המומלץ לשורה (100MB), כנראה שעדיף לבחור שורות שמייצגות חצי שעה או דקה.
היתרונות של תבניות דלי זמן כוללים:
הביצועים ישתפרו. לדוגמה, אם מאחסנים 100 מדידות, Bigtable כותב וקורא את המדידות האלה מהר יותר אם הן נמצאות בשורה אחת מאשר אם הן נמצאות ב-100 שורות.
נתונים שמאוחסנים בשיטה הזו נדחסים בצורה יעילה יותר מאשר נתונים בטבלאות ארוכות וצרות.
החסרונות כוללים:
- תבניות עיצוב של סכימות עם קטגוריות זמן הן מורכבות יותר מתבניות עם חותמת זמן אחת, ופיתוח שלהן יכול לדרוש יותר זמן ומאמץ.
הוספת עמודות חדשות לאירועים חדשים
בתבנית הזו של קטגוריית זמן, כותבים עמודה חדשה בשורה לכל אירוע, ומאחסנים את הנתונים במגדיר העמודה במקום כערך תא. כלומר, לכל תא שולחים את קבוצת העמודות, מגדיר העמודה וחותמת הזמן, אבל לא שולחים ערך.
אם נשתמש בתבנית הזו בנתונים לדוגמה של בלון מזג האוויר, כל שורה תכיל את כל המדידות של מדד אחד, כמו pressure, של בלון מזג אוויר אחד, במהלך שבוע. כל מפתח שורה מכיל את המיקום, מזהה הבלון, המדד שאתם מתעדים בשורה ומספר השבוע. בכל פעם שבלון מדווח על הנתונים שלו למדד, אתם מוסיפים עמודה חדשה לשורה. מגדיר העמודה מכיל את המדידה, הלחץ בפסקל, לדקה שמזוהה על ידי חותמת הזמן של התא.
בדוגמה הזו, אחרי שלוש דקות שורה יכולה להיראות כך:
| מפתח שורה | 94558 | 94122 | 95992 |
|---|---|---|---|
| us-west2#3698#pressure#week1 | "" (t2021-03-05-1200) | "" (t2021-03-05-1201) | "" (t2021-03-05-1202) |
תרחישים לדוגמה לשימוש בתבנית הזו:
אתם לא צריכים למדוד שינויים בנתונים של סדרת הזמן.
אתם רוצים לחסוך מקום באחסון על ידי שימוש במגדירי עמודות כנתונים.
הוספת תאים חדשים לאירועים חדשים
בתבנית הזו של קטגוריית זמן, מוסיפים תאים חדשים לעמודות קיימות כשכותבים אירוע חדש. התבנית הזו מאפשרת לכם לנצל את היכולת של Bigtable לאחסן כמה תאים עם חותמות זמן בשורה ובעמודה נתונות. חשוב לציין כללים לאיסוף אשפה כשמשתמשים בתבנית הזו.
אם לעומס העבודה יש קצב אירועים גבוה, יכול להיות שיתרחשו כמה אירועים באותה אלפית השנייה, מה שעלול לגרום לאובדן נתונים בגלל התנגשויות בחותמות הזמן. כדי למנוע את זה כשמוסיפים תאים חדשים לאירועים חדשים, אפשר להגדיר את הטבלה כך שתשתמש ברמת פירוט של חותמת זמן במיקרו-שניות. התכונה הזו זמינה רק למופעים במהדורת Enterprise Plus.
לדוגמה, בנתונים של בלון מזג האוויר, כל שורה מכילה את כל המדידות של בלון מזג אוויר אחד במהלך שבוע. התחילית של מפתח השורה היא מזהה של השבוע, כך שאפשר לקרוא נתונים של שבוע שלם עבור כמה בלונים באמצעות שאילתה אחת. הקטעים האחרים של מפתח השורה הם המיקום שבו הבלון פועל ומספר המזהה של הבלון. בטבלה יש קבוצת עמודות אחת, measurements, ובקבוצת העמודות הזו יש עמודה אחת לכל סוג של מדידה: pressure, temperature, humidity ו-altitude.
בכל פעם שבלון שולח את המדידות שלו, האפליקציה כותבת ערכים חדשים בשורה שמכילה את נתוני הבלון של השבוע הנוכחי, וכותבת תאים נוספים עם חותמת זמן בכל עמודה. בסוף השבוע, בכל עמודה בכל שורה יש מדידה אחת לכל דקה בשבוע, או 10,080 תאים (אם מדיניות איסוף האשפה מאפשרת זאת).
כל עמודה בכל שורה מכילה מדידה לכל דקה בשבוע. במקרה כזה, אחרי שלוש דקות, שתי העמודות הראשונות בשורה עשויות להיראות כך:
| מפתח שורה | לחץ | טמפ' |
|---|---|---|
| asia-south2#3698#week1 | 94558 (t2021-03-05-1200) | 9.5 (t2021-03-05-1200) |
| 94122 (t2021-03-05-1201) | 9.4 (t2021-03-05-1201) | |
| 95992 (t2021-03-05-1202) | 9.2 (t2021-03-05-1202) |
תרחישים לדוגמה לשימוש בתבנית הזו:
- אתם רוצים למדוד שינויים במדדים לאורך זמן.
שורות עם חותמת זמן אחת
בתבנית הזו, יוצרים שורה לכל אירוע או מדידה חדשים במקום להוסיף תאים לעמודות בשורות קיימות. הסיומת של מפתח השורה היא הערך של חותמת הזמן. טבלאות מהסוג הזה הן בדרך כלל ארוכות וצרות, וכל עמודה בשורה מכילה רק תא אחד.
חותמת זמן אחת בסדרה
בתבנית הזו, כל הנתונים של שורה מאוחסנים בעמודה אחת בפורמט שעבר סריאליזציה, כמו JSON או מאגר אחסון לפרוטוקולים (protobuf). הגישה הזו מתוארת בפירוט במאמר שיטות מומלצות לעיצוב סכימה.
לדוגמה, אם אתם משתמשים בתבנית הזו כדי לאחסן את הנתונים של בלון מזג האוויר, הטבלה שלכם עשויה להיראות כך אחרי ארבע דקות:
| מפתח שורה | measurements_blob |
|---|---|
| us-west2#3698#2021-03-05-1200 | protobuf_1 |
| us-west2#3698#2021-03-05-1201 | protobuf_2 |
| us-west2#3698#2021-03-05-1202 | protobuf_3 |
| us-west2#3698#2021-03-05-1203 | protobuf_4 |
היתרונות של התבנית הזו כוללים:
יעילות האחסון
מהירות
החסרונות כוללים:
אם אתם לא משתמשים בתכונות של שאילתות SQL ב-Bigtable ל-JSON או למאגרי אחסון לפרוטוקולים, אתם לא יכולים לאחזר רק שדות ספציפיים כשאתם קוראים את הנתונים, אלא אתם צריכים לקרוא את כל הנתונים של תא מסוים.
הצורך לבטל את ההסדרה של הנתונים אחרי הקריאה שלהם
תרחישים לדוגמה לשימוש בתבנית הזו:
כמעט תמיד צריך לאחזר את כל המדידות של אירוע נתון בו-זמנית.
אתם נותנים עדיפות ליעילות האחסון כי אתם כמעט תמיד מאחזרים את כל המדידות של אירוע נתון בו-זמנית. אפשר להשתמש ביכולות ה-SQL של Bigtable כדי לסנן נתונים בצד השרת, אבל התבנית הזו הכי מועילה כשלא צריך לסנן לעיתים קרובות.
כל אירוע מכיל כל כך הרבה מדידות, שאם תאחסנו את הנתונים בכמה עמודות, יכול להיות שתחרגו מהמגבלה של 100MB לכל שורה.
חותמת זמן אחת לא מסודרת
בתבנית הזו, אתם מאחסנים כל אירוע בשורה משלו, גם אם אתם מתעדים רק מדידה אחת. הנתונים בעמודות לא מסודרים לפי סדר מסוים.
היתרונות של התבנית הזו כוללים:
בדרך כלל קל יותר להטמיע אותו מאשר תבנית של קטגוריית זמן.
יכול להיות שתשקיעו פחות זמן בשיפור הסכימה לפני השימוש בה.
החסרונות של התבנית הזו בדרך כלל עולים על היתרונות:
הביצועים של Bigtable פחות טובים עם התבנית הזו.
נתונים שמאוחסנים בדרך הזו לא נדחסים בצורה יעילה כמו נתונים בעמודות רחבות יותר.
גם כשחותמת הזמן נמצאת בסוף מפתח השורה, התבנית הזו יכולה לגרום לנקודות חמות.
תרחישים לדוגמה לשימוש בתבנית הזו:
אתם רוצים תמיד לאחזר את כל העמודות, אבל רק טווח מסוים של חותמות זמן, ויש לכם סיבה לא לאחסן את הנתונים במבנה שעבר סריאליזציה.
אתם רוצים לאחסן מספר בלתי מוגבל של אירועים.
בנתונים לדוגמה של בלון מזג האוויר, קבוצת העמודות ומגדירי העמודות זהים לדוגמה שמשתמשת בקטגוריות זמן ובתאים חדשים. אבל בתבנית הזו, כל קבוצה של מדידות מדווחות לכל בלון חיזוי נכתבת בשורה חדשה. בטבלה הבאה מוצגות חמש שורות שכתובות לפי התבנית הזו:
| מפתח שורה | לחץ | טמפרטורה | לחות | גובה |
|---|---|---|---|---|
| us-west2#3698#2021-03-05-1200 | 94558 | 9.6 | 61 | 612 |
| us-west2#3698#2021-03-05-1201 | 94122 | 9.7 | 62 | 611 |
| us-west2#3698#2021-03-05-1202 | 95992 | 9.5 | 58 | 602 |
| us-west2#3698#2021-03-05-1203 | 96025 | 9.5 | 66 | 598 |
| us-west2#3698#2021-03-05-1204 | 96021 | 9.6 | 63 | 624 |
שיטות נוספות
אם אתם צריכים לשלוח כמה שאילתות שונות לאותה קבוצת נתונים, כדאי לשמור את הנתונים בכמה טבלאות, שלכל אחת מהן יש מפתח שורה שמיועד לאחת מהשאילתות.
במקרים מסוימים אפשר גם לשלב בין תבניות. לדוגמה, אפשר לאחסן נתונים שעברו סריאליזציה בשורות שמייצגות קטגוריות של זמן, כל עוד השורות לא גדולות מדי.
המאמרים הבאים
- בודקים את השלבים שצריך לבצע כדי לתכנן סכימה.
- שיטות מומלצות לתכנון סכימה
- מידע על הביצועים שאפשר לצפות להם מ-Bigtable
- הכרת יכולות האבחון של Key Visualizer.