כדי להעריך את השימוש שלכם ב-Cloud Firestore ואת העלויות, אפשר להשתמש בדוגמה הבאה של אפליקציית צ'אט בסיסית. זו לא הערכה מדויקת, אבל היא יכולה לעזור לכם להבין טוב יותר איך מתבצע החיוב על השימוש ב-Cloud Firestore.
סקירה כללית: עלויות לפי רמת שימוש
כדי להמחיש את העלויות האופייניות, נשתמש באפליקציית צ'אט לדוגמה, שבה המשתמשים יכולים לפתוח צ'אטים עם שני משתתפים או יותר. המשתמשים יכולים לראות את הצ'אטים הפעילים שלהם ברשימה, לקרוא הודעות ולשלוח הודעות. בדוגמה הזו אנחנו משתמשים בתמחור של אזור רב-אזורי בצפון אמריקה (בספציפיות nam5).
הנחות
ההנחות הבאות מתייחסות לשימוש ולאחסון נתונים:
- מספר המשתמשים הפעילים ביום (DAU) הוא 10% מסך ההתקנות של האפליקציה. כדי לאמוד את העלויות היומיות, אפשר להשתמש באומדן גס של מספר המשתמשים הפעילים ביום (DAU). אלה המשתמשים שפותחים את האפליקציה שלכם באופן פעיל ומשתמשים בה ביום מסוים. בדרך כלל מדובר בקבוצת משנה קטנה מתוך סך ההתקנות של האפליקציה. לצורך החישובים שבהמשך, הערכנו את מספר המשתמשים הפעילים היומיים כ-10% ממספר ההתקנות הכולל של האפליקציה.
- גודלי המסמכים קטנים יחסית. בטבלה שלמטה מפורט גודל המסמך לפי סוג.
- הנתונים נשמרים למשך שלושה חודשים בלבד. ההודעות באפליקציית הצ'אט לדוגמה נשמרות רק למשך שלושה חודשים. כדי להסביר את פעולות המחיקה, בחישובים שלמטה מוצגת מחיקה יומית לכל כתיבה יומית.
- אומדני העלויות האלה משקפים את רוב העלויות של האפליקציה לדוגמה, אבל לא את כולן. חישבנו את רוב העלויות של האפליקציה על ידי חישוב הפעולות, האחסון של המשתמשים וההודעות ותעבורת הנתונים היוצאת (egress) של המשימות הנפוצות ביותר של המשתמשים שמפורטות במדריך הזה. עם זאת, יכול להיות שתצטרכו לקחת בחשבון עלויות נוספות, בהתאם למבנה של האפליקציה ולצרכים שלכם בנוגע לנתונים. אפשר להשתמש בדוגמה הזו כדי להנחות את החישובים, אבל מומלץ לעיין בדף התמחור כדי לקבל הסברים מפורטים יותר על העלויות של 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 USD ליום * 30 = 6.30 USD | |||||
| 100,000 כתיבות יומיות בסך הכול | = | 20,000 פעולות כתיבה ללא עלות + (80,000 פעולות כתיבה במחיר של 0.18 $ ל-100,000 פעולות כתיבה) | = | 0.8 * $0.18 | |
| 0.14 USD ליום * 30 = 4.20 USD | |||||
| 100,000 מחיקות יומיות בסך הכול | = | 20,000 מחיקות ללא עלות + (80,000 מחיקות במחיר של 0.02 $ ל-100,000) | = | 0.8 * $0.02 | |
| 0.02 USD ליום * 30 = 0.60 USD | |||||
| עלויות אחסון/רשת | |||||||
|---|---|---|---|---|---|---|---|
| העלות החודשית הכוללת = 1.04 $ לחודש | |||||||
| תעבורת נתונים יוצאת (egress) של 20KB לכל משתמש פעיל ביום * 5,000 משתמשים פעילים ביום | = | 100MB של תעבורת נתונים יוצאת יומית * 30 | = | תעבורת נתונים יוצאת (egress) ברשת של 3GB לחודש | |||
| תעבורת נתונים יוצאת (egress) של 3GB ללא עלות = ללא עלות1 | |||||||
| נפח אחסון של 15KB להודעות ביום / משתמש פעיל ביום (DAU) + נפח אחסון של 3KB / התקנה2 | = | 45KB של אחסון / משתמש פעיל ביום * 5,000 משתמשים פעילים ביום | = | 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$ליום * 30 = 143.10 $ | |||||
| 2 מיליון כתיבות יומיות בסך הכול | = | 20,000 פעולות כתיבה ללא עלות + (1,980,000 פעולות כתיבה במחיר של $0.18 ל-100,000) | = | 19.8 * $0.18 | |
| 3.56 USD / day * 30 = 106.80 USD | |||||
| 2 מיליון מחיקות ביום | = | 20,000 מחיקות ללא עלות + (1,980,000 מחיקות במחיר של 0.02 $ל-100,000 מחיקות) | = | 19.8 * $0.02 | |
| 0.40 USD / day * 30 = 12.00 USD | |||||
| עלויות אחסון/רשת | |||||||
|---|---|---|---|---|---|---|---|
| העלות החודשית הכוללת = $30.12/month | |||||||
| 20KB / DAU של יציאה יומית * 100,000 משתמשים פעילים ביום | = | תעבורת נתונים יוצאת (egress) של 2GB ליום * 30 | = | 60GB של תעבורת נתונים יוצאת (egress) מהרשת מדי חודש | |||
| תעבורת נתונים יוצאת (egress) בנפח 10GB ללא עלות + (תעבורת נתונים יוצאת בנפח 50GB * 0.12$ לכל GB) = 6.00 $לחודש | |||||||
| 15KB אחסון יומי של הודעות / משתמש פעיל ביום (DAU) + 3KB אחסון / התקנה1 | = | 45KB של אחסון / משתמש פעיל ביום * 100,000 משתמשים פעילים ביום | = | 4.5GB של אחסון יומי / משתמש פעיל יומי * 30 | = | שימוש חודשי בנפח אחסון של 135GB | |
| 1GB אחסון ללא עלות + (134GB * 0.18$/GB) = 24.12 $לחודש | |||||||
1 מכיוון שההנחה שלנו היא שמספר המשתמשים הפעילים ביום (DAU) הוא 10% ממספר ההתקנות הכולל של האפליקציה, המספר הזה מייצג את המספר הכולל של המשתמשים שהתקינו את האפליקציה.
גדול
(10 מיליון התקנות)
ל-10,00�000 התקנות של אפליקציה (1,000,000 משתמשים פעילים ביום): 2,951.52$
| עלויות קריאה/כתיבה | |||||
|---|---|---|---|---|---|
| העלות החודשית הכוללת = סך הכול: $2637.90/month | |||||
| 80 מיליון קריאות יומיות בסך הכול | = | 50,000 קריאות ללא עלות + (79.95 מיליון קריאות במחיר של 0.06 $ ל-100,000 קריאות) | = | 799.5 * $0.06 | |
| 47.97$ ליום * 30 = 1439.10 $ | |||||
| 20 מיליון כתיבות יומיות בסך הכול | = | 20,000 פעולות כתיבה ללא עלות + (19.98 מיליון פעולות כתיבה במחיר של $0.18 ל-100,000 פעולות) | = | 199.8 * $0.18 | |
| 35.96 USD / day * 30 = 1078.80 USD | |||||
| 20 מיליון מחיקות ביום | = | 20,000 מחיקות ללא עלות + (19.98 מיליון מחיקות במחיר של 0.02 $ ל-100,000 מחיקות) | = | 199.8 * $0.02 | |
| 4.00$ ליום * 30 = 120.00 $ | |||||
| עלויות אחסון/רשת | |||||||
|---|---|---|---|---|---|---|---|
| העלות החודשית הכוללת = 313.62 $ לחודש | |||||||
| תעבורת נתונים יוצאת (egress) של 20KB לכל משתמש פעיל ביום (DAU) * מיליון משתמשים פעילים ביום | = | תעבורת נתונים יוצאת (egress) של 20GB ליום * 30 | = | תעבורת נתונים יוצאת (egress) של 600GB מהרשת מדי חודש | |||
| 10GB תעבורת נתונים יוצאת (egress) ללא עלות + (590GB תעבורת נתונים יוצאת (egress) * 0.12$/GB) = 70.80 $לחודש | |||||||
| 15KB אחסון יומי של הודעות / משתמש פעיל ביום (DAU) + 3KB אחסון / התקנה1 | = | 45KB של אחסון / משתמש פעיל ביום * מיליון משתמשים פעילים ביום | = | 45GB של אחסון יומי / DAU * 30 | = | שימוש חודשי בנפח אחסון של 1,350GB | |
| (1GB אחסון ללא עלות) + (1,349GB * 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 / user / day
- אחסון: (20 * 0.75KB) = 15 KB / user / day
סך השימוש לפי משימת משתמש
בוחרים כל משימת משתמש כדי לראות תיאור מלא ופירוט של העלויות של הפעולות, האחסון והרשת באפליקציה.
לראות את רשימת הצ'אטים
במסך הבית של האפליקציה נטענים 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