הדוגמה הבאה, של אפליקציית צ'אט בסיסית, ממחישה את השימוש ב-Cloud Firestore ואת העלויות. זו לא הערכה מדויקת, אבל היא יכולה לעזור לכם להבין טוב יותר איך השימוש ב-Cloud Firestore מחויב.
סקירה כללית: עלויות לפי רמת השימוש
כדי להמחיש את העלויות האופייניות, נבחן דוגמה של אפליקציית צ'אט שבה המשתמשים יכולים להתחיל צ'אטים עם שני משתתפים או יותר. המשתמשים יכולים לראות את הצ'אטים הפעילים שלהם ברשימה, לקרוא הודעות ולשלוח הודעות. בדוגמה הזו אנחנו משתמשים בתמחור של מספר אזורים בצפון אמריקה (באופן ספציפי nam5).
הנחות
נניח שההנחות הבאות לגבי השימוש ואחסון הנתונים נכונות:
- מספר המשתמשים הפעילים ביום (DAU) הוא 10% מסך ההתקנות של האפליקציה. כדי להעריך את העלויות היומיות, אתם יכולים להשתמש בהערכה גסה של מספר המשתמשים הפעילים ביום (DAU). אלה המשתמשים שפותחים את האפליקציה ומשתמשים בה באופן פעיל ביום נתון. בדרך כלל, מדובר בקבוצת משנה קטנה מתוך כלל ההתקנות של האפליקציה. בחישובים שבהמשך, הערכנו את מספר המשתמשים הפעילים ביום כ-10% ממספר ההתקנות הכולל של האפליקציה.
- המסמכים קטנים יחסית. בטבלה שלמטה מפורט גודל המסמך לפי סוג.
- הנתונים נשמרים למשך שלושה חודשים בלבד. ההודעות באפליקציית הצ'אט לדוגמה נשמרות רק למשך שלושה חודשים. כדי להביא בחשבון את פעולות המחיקה, החישובים הבאים מציגים מחיקה יומית לכל כתיבה יומית.
- אומדני העלויות האלה משקפים את רוב העלויות של האפליקציה לדוגמה, אבל לא את כולן. הבאנו בחשבון את רוב העלויות של האפליקציה על ידי חישוב הפעולות, אחסון המשתמשים וההודעות, והתעבורה היוצאת למשימות המשתמש הנפוצות ביותר שמתוארות במדריך הזה. עם זאת, יכול להיות שתצטרכו להביא בחשבון עלויות נוספות, בהתאם למבנה של האפליקציה ולצורכי הנתונים שלכם. אתם יכולים להיעזר בדוגמה הזו כדי לבצע את החישובים, אבל כדאי לעיין בדף התמחור כדי לקבל הסברים מפורטים יותר על העלויות של Cloud Firestore.
בקטע פירוט: שימוש מחויב לפי משימת משתמש מופיע פירוט של הפעולות לפי משימת משתמש.
קטן
(50,000 התקנות)
50,000 התקנות של האפליקציה (5,000 משתמשים פעילים ביום): 12.14$ לחודש
| עלויות קריאה/כתיבה | |||||
|---|---|---|---|---|---|
| העלות החודשית הכוללת = 11.10 $לחודש | |||||
| 400 אלף קריאות ביום בסך הכול | = | 50,000 קריאות ללא עלות + (350,000 קריאות בעלות של 0.06 $ל-100,000) | = | 3.5 * $0.06 | |
| 0.21$ ליום * 30 = 6.30 $ | |||||
| 100,000 פעולות כתיבה ביום בסך הכול | = | 20,000 פעולות כתיבה ללא עלות + (80,000 פעולות כתיבה בעלות של $0.18 ל-100,000) | = | .8 * $0.18 | |
| 0.14$ ליום * 30 = 4.20 $ | |||||
| 100,000 מחיקות ביום בסך הכול | = | 20,000 מחיקות ללא עלות + (80,000 מחיקות בעלות של $0.02 ל-100,000) | = | .8 * $0.02 | |
| $0.02 / day * 30 = $0.60 | |||||
| עלויות אחסון ורשת | |||||||
|---|---|---|---|---|---|---|---|
| עלות חודשית כוללת = 1.04 $לחודש | |||||||
| 20KB לכל DAU של תעבורת נתונים יוצאת (egress) ביום * 5,000 DAU | = | 100MB של תעבורת נתונים יוצאת ביום * 30 | = | תעבורת נתונים יוצאת (egress) של 3GB בחודש | |||
| תעבורת נתונים יוצאת (egress) של 3GB ללא עלות = ללא עלות1 | |||||||
| אחסון הודעות יומי בנפח 15KB לכל משתמש פעיל ביום (DAU) + אחסון בנפח 3KB לכל התקנה2 | = | 45KB של נפח אחסון / DAU * 5,000 DAU | = | 225MB של אחסון יומי / DAU * 30 | = | נפח אחסון חודשי של 6.75GB | |
| אחסון בנפח 1GB ללא עלות + (5.75 * $0.18) = $1.04 לחודש | |||||||
1 תעבורת נתונים יוצאת (egress) של 10GB ברשת בכל חודש היא ללא עלות ב-Cloud Firestore.
2 ההנחה שלנו היא שמספר המשתמשים הפעילים ביום הוא 10% מסך ההתקנות של האפליקציה, ולכן המספר הזה מייצג את המספר הכולל של המשתמשים שהתקינו את האפליקציה.
בינוני
(מיליון התקנות)
למיליון התקנות של האפליקציה (100,000 משתמשים פעילים ביום): 292.02$ לחודש
| עלויות קריאה/כתיבה | |||||
|---|---|---|---|---|---|
| עלות חודשית כוללת = 261.90 $לחודש | |||||
| 8 מיליון קריאות ביום בסך הכול | = | 50,000 קריאות ללא עלות + (7.95 מיליון קריאות בעלות של $0.06 ל-100,000) | = | 79.5 * $0.06 | |
| $4.77 / day * 30 = $143.10 | |||||
| 2 מיליון פעולות כתיבה ביום בסך הכול | = | 20,000 פעולות כתיבה ללא עלות + (1.98 מיליון פעולות כתיבה בעלות של $0.18 ל-100,000) | = | 19.8 * $0.18 | |
| $3.56 / day * 30 = $106.80 | |||||
| 2 מיליון מחיקות ביום בסך הכול | = | 20,000 מחיקות ללא עלות + (1.98 מיליון מחיקות בעלות של 0.02 $ל-100,000) | = | 19.8 * $0.02 | |
| $0.40 / day * 30 = $12.00 | |||||
| עלויות אחסון ורשת | |||||||
|---|---|---|---|---|---|---|---|
| העלות החודשית הכוללת = 30.12 $לחודש | |||||||
| 20KB לכל משתמש פעיל ביום (DAU) של תעבורת נתונים יוצאת ביום * 100,000 משתמשים פעילים ביום (DAU) | = | תעבורת נתונים יוצאת (egress) יומית של 2GB * 30 | = | תעבורת נתונים יוצאת (egress) של 60GB בחודש | |||
| תעבורת נתונים יוצאת (egress) של 10GB ללא עלות + (תעבורת נתונים יוצאת של 50GB * 0.12$ לכל GB) = 6.00 $לחודש | |||||||
| אחסון הודעות יומי בנפח 15KB לכל משתמש פעיל ביום (DAU) + אחסון בנפח 3KB לכל התקנה1 | = | נפח אחסון של 45KB לכל משתמש פעיל ביום * 100,000 משתמשים פעילים ביום | = | 4.5GB של אחסון יומי / DAU * 30 | = | נפח אחסון נדרש של 135GB בחודש | |
| אחסון בנפח 1GB ללא עלות + (134GB * 0.18$ ל-GB) = 24.12 $לחודש | |||||||
1 מכיוון שההנחה שלנו היא שהמשתמשים הפעילים ביום (DAU) מהווים 10% מסך ההתקנות של האפליקציה, המספר הזה מייצג את המספר הכולל של המשתמשים שהתקינו את האפליקציה.
גדול
(10 מיליון התקנות)
10,000,000 התקנות של האפליקציה (1,000,000 משתמשים פעילים ביום): 2,951.52$
| עלויות קריאה/כתיבה | |||||
|---|---|---|---|---|---|
| עלות חודשית כוללת = סה"כ: 2,637.90$ לחודש | |||||
| 80 מיליון קריאות ביום בסך הכול | = | 50,000 קריאות בחינם + (79.95 מיליון קריאות בעלות של 0.06 $ל-100,000) | = | 799.5 * $0.06 | |
| 47.97$ ליום * 30 = 1,439.10 $ | |||||
| 20 מיליון פעולות כתיבה ביום בסך הכול | = | 20,000 פעולות כתיבה ללא עלות + (19.98 מיליון פעולות כתיבה בעלות של 0.18 $ל-100,000) | = | 199.8 * $0.18 | |
| $35.96 / day * 30 = $1078.80 | |||||
| 20 מיליון מחיקות ביום בסך הכול | = | 20,000 מחיקות ללא עלות + (19.98 מיליון מחיקות בעלות של $0.02 ל-100,000) | = | 199.8 * $0.02 | |
| $4.00 / day * 30 = $120.00 | |||||
| עלויות אחסון ורשת | |||||||
|---|---|---|---|---|---|---|---|
| העלות החודשית הכוללת = 313.62 $לחודש | |||||||
| תעבורת נתונים יוצאת (egress) יומית של 20KB לכל DAU * 1M DAUs | = | 20GB של תעבורת נתונים יוצאת (egress) ביום * 30 | = | תעבורת נתונים יוצאת (egress) של 600GB בחודש | |||
| תעבורת נתונים יוצאת (egress) של 10GB ללא עלות + (תעבורת נתונים יוצאת של 590GB * 0.12$ לכל GB) = 70.80 $לחודש | |||||||
| אחסון הודעות יומי בנפח 15KB לכל משתמש פעיל ביום (DAU) + אחסון בנפח 3KB לכל התקנה1 | = | 45KB של נפח אחסון / DAU * 1M DAU | = | 45GB של אחסון יומי / DAU * 30 | = | נפח אחסון חודשי של 1,350GB | |
| (אחסון בנפח 1GB ללא עלות) + (1349GB * 0.18$ ל-GB) = 242.82$ לחודש | |||||||
1 מכיוון שההנחה שלנו היא שהמשתמשים הפעילים ביום (DAU) מהווים 10% מסך ההתקנות של האפליקציה, המספר הזה מייצג את המספר הכולל של המשתמשים שהתקינו את האפליקציה.
אחד היתרונות של מודל החיוב של Cloud Firestore הוא שמשלמים רק על מה שמשתמשים בו. כתוצאה מכך, החיוב עשוי לגדול או לקטון בהתאם למספר המשתמשים הפעילים ביום.
פירוט: שימוש שחויב לפי משימת משתמש
בדוגמה שלנו לאפליקציית צ'אט, מבנה הנתונים הוא:
-
users/{userId}– רשומות של משתמשים groups/{groupId}– צ'אטים בין 2 משתמשים או יותר-
messages/{messageId}– כל הודעה בצ'אט.
-
אחסון הנתונים
כדי לחשב את עלויות האחסון של נתוני האפליקציה, נשתמש בהנחות הבאות לגבי גודלי המסמכים:
| איסוף | גודל המסמך (במעבר) | גודל המסמך (בדיסק)* |
|---|---|---|
| משתמשים | 1KB | 3KB |
| קבוצות | 0.5KB | 1.5KB |
| הודעות | 0.25KB | 0.75KB |
*חישוב הגודל הזה כולל אינדקסים לשדות של ההודעות, אבל מניח שההוספה לאינדקס מושבתת לתוכן ההודעות.
כדי להוזיל את עלויות האחסון, האפליקציה שומרת רק הודעות בנות עד שלושה חודשים.
למידע נוסף על חישוב עלויות האחסון, קראו את המאמר הסבר על חישובים של נפח האחסון.
תפעול
בדרך כלל, המשתמשים מבצעים את הפעולות הנפוצות הבאות באפליקציה:
- הצגת רשימת הצ'אטים: המשתמשים פותחים את מסך הבית של האפליקציה ורואים רשימה של צ'אטים (קבוצתיים ואישיים) לפי סדר ההודעות האחרונות שפורסמו.
- לקרוא הודעות בצ'אט: המשתמשים בוחרים צ'אטים ממסך הבית וקוראים הודעות אחרונות מהצ'אטים.
- שליחת הודעה לצ'אט: המשתמשים שולחים הודעות לצ'אטים (קבוצתיים או אישיים).
המספר הכולל של הפעולות המשוערות באפליקציה לדוגמה ב-Cloud Firestore לשלוש המשימות האופייניות של המשתמשים הוא:
- קריאות: (5 * 10) + (30) = 80 קריאות / משתמש / יום
- כתיבות: (10 * 2) = 20 כתיבות / משתמש / יום
- תעבורת נתונים יוצאת (egress) ברשת: (50 * 0.25KB) + (30 * 0.25KB) = 20KB / משתמש / יום
- אחסון: (20 * 0.75KB) = 15 KB / משתמש / יום
השימוש הכולל לפי משימת משתמש
בוחרים כל משימת משתמש כדי לראות תיאור מלא ופירוט של עלויות התפעול, האחסון והרשת באפליקציה.
לרשימת הצ'אטים
במסך הבית של האפליקציה נטענים 25 הצ'אטים האחרונים, ונוצרים חיובים על 25 קריאות של מסמכים. נניח שמשתמש פעיל פותח את האפליקציה 5 פעמים ביום, ובסך הכול 125 קריאות לכל משתמש בכל יום. עם זאת, שאילתות יעילות יותר, כמו זו שבדוגמה הבאה, יכולות להפחית את העומס הזה.
בדוגמה הבאה, אנחנו מגבילים את השאילתה לצ'אטים חדשים באמצעות חותמת זמן של כל אחזור מוצלח, שמאוחסנת על ידי האפליקציה:
db.collection('groups') .where('participants', 'array-contains', 'user123') .where('lastUpdated', '>', lastFetchTimestamp) .orderBy('lastUpdated', 'desc') .limit(25)
נניח שיש בממוצע 10 צ'אטים מעודכנים בכל פעם שהמשתמש בודק את האפליקציה. השאילתה הזו גורמת רק ל-10 קריאות של מסמכים.
איך קוראים הודעות בצ'אט
המשתמשים לוחצים על שרשורי צ'אט במסך הבית כדי לראות את ההודעות האחרונות, ו-50 ההודעות האחרונות נטענות בטעינה הראשונית.
נניח שהמשתמש הממוצע מבצע את הפעולה הזו 5 פעמים ביום (פעם אחת בכל פעם שהוא פותח את מסך הבית), מה שמוביל לסך של 250 קריאות לכל משתמש בכל יום. אנחנו יכולים גם להגביל את השאילתה להודעות חדשות מאז זמן האחזור האחרון:
db.collection('groups') .doc('group234') .collection('messages') .where('sentTime', '>', lastFetchTimestamp) .orderBy('sentTime', 'desc') .limit(50)
נניח שמשתמש מקבל כ-30 הודעות ביום בכל הצ'אטים. מכיוון שהגבלתם את השאילתה לאחזור הודעות חדשות, זה אומר שמאחזרים רק 30 הודעות ביום.
שליחת הודעה לצ'אט
המשתמשים יכולים לשלוח הודעות למשתתפים אחרים אחרי שהם מצטרפים לצ'אט. נניח שמשתמש פעיל שולח כ-10 הודעות ביום.
כל הודעה שנשלחת גורמת לשתי כתיבות של מסמכים: כתיבה אחת לאוסף המשנה messages של הצ'אט וכתיבה אחת למסמך ההורה של הצ'אט כדי לעדכן את חותמת הזמן lastUpdated ומטא-נתונים אחרים.
שימו לב שעלות הקריאה של ההודעות האלה נלקחה בחשבון בתהליכים האחרים, כך שהסכומים הכוללים שבהמשך מתייחסים רק לעלות הכתיבה הזו.
שימוש שמחויב על משימות של אדמינים
כבעלים או כאדמינים של אפליקציה, סביר להניח שתרצו ליצור דוחות מנתוני האפליקציה. לדוגמה, יכול להיות שתרצו לספור מדי יום את מספר ההודעות שהמשתמשים שלכם שולחים. אפשר לעשות את זה באמצעות צבירת count() של קבוצת האוספים messages.
בשאילתות צבירה כמו count(), תחויבו על קריאת מסמך אחת לכל קבוצה של עד 1,000 רשומות אינדקס שתואמות לשאילתה. הפעלת הצבירה היומית הזו מוסיפה את החיובים החודשיים הבאים:
קטן
(50,000 התקנות)
50,000 התקנות של האפליקציה (5,000 משתמשים פעילים ביום): 0.0009$ לחודש
5,000 משתמשים פעילים * 10 הודעות חדשות לכל משתמש = 50,000 מסמכי הודעות חדשות ביום
50,000 מסמכים שנספרו / 1,000 התאמות באינדקס לכל חיוב על קריאה = 50 קריאות
50 קריאות ביום * 30 ימים = 1,500 קריאות בחודש
1,500 פעולות קריאה בחודש * מחיר של 0.06$ ל-100,000 פעולות קריאה = 0.0009$ בחודש
בינוני
(מיליון התקנות)
למיליון התקנות של האפליקציה (100,000 משתמשים פעילים ביום): 0.018$ לחודש
100,000 משתמשים פעילים * 10 הודעות חדשות לכל משתמש = 1,000,000 מסמכי הודעות חדשות ביום
1,000,000 מסמכים שנספרו / 1,000 התאמות לאינדקס לכל חיוב על קריאה = 1,000 קריאות
1,000 קריאות ביום * 30 ימים = 30,000 קריאות בחודש
30,000 קריאות בחודש * מחיר של 0.06$ ל-100,000 קריאות = 0.018$ בחודש
גדול
(10 מיליון התקנות)
10,000,000 התקנות של האפליקציה (1,000,000 משתמשים פעילים ביום): 0.18$
1,000,000 משתמשים פעילים * 10 הודעות חדשות לכל משתמש = 10,000,000 מסמכי הודעות חדשות ביום
10,000,000 מסמכים שנספרו / 1,000 התאמות לאינדקס לכל חיוב על קריאה = 10,000 קריאות
10,000 קריאות ביום * 30 ימים = 300,000 קריאות בחודש
300,000 קריאות בחודש * מחיר של 0.06$ ל-100,000 קריאות = 0.18$ בחודש
ההטבות הכלולות: שירותים ללא עלות לאפליקציה
הפעולות, האחסון ורוחב הפס של הרשת ב-Cloud Firestore נחשבים לשימוש שניתן לחיוב, אבל אתם מקבלים גם מגוון הטבות אחרות ללא עלות נוספת. כשמשווים בין Cloud Firestore לאפשרויות אחרות של מסדי נתונים, כדאי להביא בחשבון את השירותים הבאים שניתנים ללא עלות:
- גישה ישירה ללקוח: הגישה אל Cloud Firestore מתבצעת ישירות מקוד הלקוח באמצעות ערכות ה-SDK המקוריות שלנו. כלומר, לא צריך ליצור ולהפעיל שרת API כדי לחבר את הלקוחות בנייד למסד הנתונים.
- איזון עומסים: מכיוון ש-Cloud Firestore משתנה באופן אוטומטי כדי לתמוך בתנועה למסד הנתונים, אין צורך להפעיל מאזן עומסים.
- זמן פעולה תקינה של השרת: מסדי הנתונים של Cloud Firestore פועלים בשרתי Google Cloud, ומציעים זמן פעולה תקינה חודשי של יותר מ-99%.
- אימות: אימות של מספר בלתי מוגבל של משתמשים בצורה פשוטה ומאובטחת באמצעות Firebase Authentication. Firebase Authentication משתלב ישירות עם Cloud Firestore, כך שאין צורך להפעיל שירות אימות משלכם.
- התראות: שליחת הודעות והתראות באמצעות Cloud Messaging.
- מוצרים אחרים של Firebase: אתם יכולים לשלב מוצרים אחרים של Firebase ללא עלות, כולל A/B Testing, Analytics, Crashlytics ו-Performance Monitoring. מידע נוסף על מוצרים אחרים של Firebase והתמחור של Firebase