כדי להעריך את השימוש ב-Cloud Firestore ואת העלויות, אפשר להשתמש בדוגמה הזו מהעולם האמיתי של אפליקציית צ'אט בסיסית. זו לא הערכה מדויקת, אבל היא יכולה לעזור לכם להבין טוב יותר איך Cloud Firestoreהשימוש שלכם מחויב.
סקירה כללית: עלויות לפי רמת שימוש
כדי להמחיש את העלויות האופייניות, נתייחס לדוגמה של אפליקציית צ'אט שבה המשתמשים יכולים לפתוח שיחות עם שני משתתפים או יותר. המשתמשים יכולים לראות את הצ'אטים הפעילים שלהם ברשימה, לקרוא הודעות ולשלוח הודעות. בדוגמה הזו, אנחנו משתמשים בתמחור של אזור צפון אמריקה שכולל כמה אזורים (בספציפיות nam5).
הנחות
חשוב להביא בחשבון את ההנחות הבאות לגבי השימוש באחסון הנתונים:
- מספר המשתמשים הפעילים ביום (DAU) הוא 10% מסך ההתקנות של האפליקציה. אתם יכולים לאמוד את העלויות היומיות שלכם באמצעות אומדן גס של מספר המשתמשים הפעילים ביום (DAU). אלה המשתמשים שפותחים את האפליקציה שלכם ומשתמשים בה באופן פעיל ביום מסוים. בדרך כלל מדובר בקבוצת משנה קטנה מתוך סך ההתקנות של האפליקציה. בחישובים שלמטה, הערכנו את מספר המשתמשים הפעילים היומיים כ-10% ממספר ההתקנות הכולל של האפליקציה.
- גודלי המסמכים קטנים יחסית. בטבלה שלמטה מפורטים גדלי המסמכים לפי סוג.
- הנתונים נשמרים למשך שלושה חודשים בלבד. ההודעות באפליקציית הצ'אט לדוגמה נשמרות רק למשך שלושה חודשים. כדי להסביר את פעולות המחיקה, בחישובים הבאים מוצגת מחיקה יומית לכל כתיבה יומית.
- ההערכות האלה של העלויות משקפות את רוב העלויות של האפליקציה לדוגמה, אבל לא את כולן. חישבנו את רוב העלויות של האפליקציה על ידי חישוב של פעולות, אחסון של משתמשים והודעות, ויציאה (egress) עבור המשימות הכי נפוצות של המשתמשים שמפורטות במדריך הזה. עם זאת, יכול להיות שתצטרכו לקחת בחשבון עלויות נוספות, בהתאם למבנה של האפליקציה ולצרכים של הנתונים. אתם יכולים להשתמש בדוגמה הזו כדי להנחות את החישובים שלכם, אבל מומלץ לעיין בדף התמחור כדי לקבל הסברים מפורטים יותר על העלויות של Cloud Firestore.
פירוט של הפעולות לפי משימת משתמש מופיע בקטע פירוט: שימוש מחויב לפי משימת משתמש.
Small
(50k installs)
50,000 התקנות של האפליקציה (5,000 משתמשים פעילים ביום): 12.14$ לחודש
| עלויות קריאה/כתיבה | |||||
|---|---|---|---|---|---|
| העלות החודשית הכוללת = $11.10 לחודש | |||||
| 400,000 קריאות יומיות בסך הכול | = | 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 מחיקות) | = | .8 * $0.02 | |
| 0.02 USD ליום * 30 = 0.60 USD | |||||
| עלויות אחסון/רשת | |||||||
|---|---|---|---|---|---|---|---|
| העלות החודשית הכוללת = $1.04 לחודש | |||||||
| 20KB / DAU של יציאה יומית * 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 / month | |||||||
1 תעבורת נתונים יוצאת (egress) ברשת בנפח 10GB מדי חודש היא ללא עלות עבור Cloud Firestore.
2 מכיוון שההנחה שלנו היא שמספר המשתמשים הפעילים היומיים הוא 10% ממספר ההתקנות הכולל של האפליקציה, המספר הזה מייצג את המספר הכולל של המשתמשים שהתקינו את האפליקציה.
בינונית
(מיליון התקנות)
ל-1,000,000 התקנות של האפליקציה (100,000 משתמשים פעילים ביום): 292.02$ לחודש
| עלויות קריאה/כתיבה | |||||
|---|---|---|---|---|---|
| העלות החודשית הכוללת = $261.90 לחודש | |||||
| 8 מיליון קריאות יומיות בסך הכול | = | 50,000 קריאות בחינם + (7,950,000 קריאות במחיר של 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 ליום * 30 = 106.80 USD | |||||
| 2 מיליון מחיקות ביום | = | 20,000 מחיקות ללא עלות + (1,980,000 מחיקות במחיר של 0.02 $ל-100,000 מחיקות) | = | 19.8 * $0.02 | |
| 0.40 USD ליום * 30 = 12.00 USD | |||||
| עלויות אחסון/רשת | |||||||
|---|---|---|---|---|---|---|---|
| העלות החודשית הכוללת = $30.12/month | |||||||
| 20KB / DAU של יציאה יומית * 100,000 משתמשים פעילים ביום | = | 2GB של תעבורת נתונים יוצאת (egress) ביום * 30 | = | תעבורת נתונים יוצאת (egress) מהרשת של 60GB לחודש | |||
| תעבורת נתונים יוצאת (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% ממספר ההתקנות הכולל של האפליקציה, המספר הזה מייצג את המספר הכולל של המשתמשים שהתקינו את האפליקציה.
Large
(10M installs)
10,000,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/month | |||||||
| תעבורת נתונים יוצאת (egress) של 20KB לכל משתמש פעיל ביום (DAU) * מיליון משתמשים פעילים ביום | = | תעבורת נתונים יוצאת (egress) של 20GB ליום * 30 | = | 600GB של תעבורת נתונים יוצאת (egress) מהרשת מדי חודש | |||
| תעבורת נתונים יוצאת (egress) בנפח 10GB ללא עלות + (תעבורת נתונים יוצאת בנפח 590GB * 0.12$/GB) = 70.80 $ לחודש | |||||||
| אחסון של 15KB ליום לכל הודעה / משתמש פעיל ביום (DAU) + אחסון של 3KB לכל התקנה1 | = | 45KB של אחסון / משתמש פעיל ביום * מיליון משתמשים פעילים ביום | = | 45GB של אחסון יומי / משתמש פעיל יומי * 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 פעולות כתיבה / משתמש / יום
- תעבורת נתונים יוצאת מהרשת: (50 * 0.25KB) + (30 * 0.25KB) = 20KB / user / day
- אחסון: (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 רשומות אינדקס שתואמות לשאילתה. הפעלת הצבירה היומית הזו מוסיפה את החיובים החודשיים הבאים:
Small
(50k installs)
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 $לחודש
בינונית
(מיליון התקנות)
ל-1,000,000 התקנות של האפליקציה (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$ לחודש
Large
(10M installs)
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 מתרחב אוטומטית כדי לתמוך בתנועה אל מסד הנתונים, לא צריך להפעיל איזון עומסים.
- זמן פעולה (uptime) של השרת: מסדי נתונים של Cloud Firestore פועלים בשרתי Google Cloud, ומציעים זמן פעולה של יותר מ-99% בחודש.
- אימות: אפשר לאמת מספר בלתי מוגבל של משתמשים בצורה פשוטה ומאובטחת באמצעות Firebase Authentication. Firebase Authentication משתלב ישירות עם Cloud Firestore, כך שלא צריך להפעיל שירות אימות משלכם.
- התראות: שליחת הודעות והתראות באמצעות Cloud Messaging.
- מוצרים אחרים של Firebase: אפשר לשלב מוצרים אחרים של Firebase ללא עלות, כולל A/B Testing, Analytics, Crashlytics, Performance Monitoring והגדרת תצורה מרחוק. מידע נוסף על מוצרים אחרים של Firebase ועל תמחור ב-Firebase