כדי להעריך את השימוש ב-Cloud Firestore ואת העלויות, אפשר להשתמש בדוגמה הבאה של אפליקציית צ'אט בסיסית. זו לא הערכה מדויקת, אבל היא יכולה לעזור לכם להבין טוב יותר איך Cloud Firestoreהשימוש שלכם מחויב.
סקירה כללית: עלויות לפי רמת שימוש
כדי להמחיש את העלויות האופייניות, נתייחס לאפליקציית צ'אט לדוגמה, שבה המשתמשים יכולים לפתוח צ'אטים עם שני משתתפים או יותר. המשתמשים יכולים לראות את הצ'אטים הפעילים שלהם ברשימה, לקרוא הודעות ולשלוח הודעות. בדוגמה הזו אנחנו משתמשים בתמחור של אזור רב-אזורי בצפון אמריקה (בספציפיות nam5
).
הנחות
כדאי לקחת בחשבון את ההנחות הבאות לגבי השימוש ואחסון הנתונים:
- מספר המשתמשים הפעילים ביום (DAU) הוא 10% ממספר ההתקנות הכולל של האפליקציה. כדי לאמוד את העלויות היומיות, אפשר להשתמש באומדן גס של מספר המשתמשים הפעילים ביום (DAU). אלה המשתמשים שפותחים את האפליקציה שלכם באופן פעיל ומשתמשים בה ביום נתון. בדרך כלל מדובר בקבוצת משנה קטנה מתוך סך ההתקנות של האפליקציה. לצורך החישובים שבהמשך, הערכנו את מספר המשתמשים הפעילים היומיים כ-10% ממספר ההתקנות הכולל של האפליקציה.
- גודלי המסמכים קטנים יחסית. בטבלה שלמטה מפורט גודל המסמך לפי סוג.
- הנתונים נשמרים למשך שלושה חודשים בלבד. ההודעות באפליקציית הצ'אט לדוגמה נשמרות לתקופה של שלושה חודשים בלבד. כדי להסביר את פעולות המחיקה, בחישובים שלמטה מוצגת מחיקה יומית לכל כתיבה יומית.
- אומדני העלויות האלה משקפים את רוב העלויות של אפליקציית הדוגמה, אבל לא את כולן. חישבנו את רוב העלויות של האפליקציה על ידי חישוב הפעולות, האחסון של המשתמשים וההודעות והיציאה של המשימות הנפוצות ביותר של המשתמשים שמפורטות במדריך הזה. עם זאת, יכול להיות שתצטרכו לקחת בחשבון עלויות נוספות, בהתאם למבנה של האפליקציה ולצרכים שלכם בנוגע לנתונים. הדוגמה הזו יכולה לעזור לכם בחישובים, אבל כדאי לעיין בדף התמחור כדי לקבל הסברים מפורטים יותר על העלויות של Cloud Firestore.
פירוט של הפעולות לפי משימת משתמש מופיע בקטע פירוט: שימוש מחויב לפי משימת משתמש.
Small
(50k installs)
50,000 התקנות של האפליקציה (5,000 משתמשים פעילים ביום): 12.14$ לחודש
עלויות קריאה/כתיבה | |||||
---|---|---|---|---|---|
העלות החודשית הכוללת = $11.10 לחודש | |||||
400K total daily reads | = | 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/month | |||||||
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.98 מיליון כתיבות במחיר של 0.18 $ל-100,000 כתיבות) | = | 19.8 * $0.18 | |
3.56 USD ליום * 30 = 106.80 USD | |||||
2 מיליון מחיקות ביום | = | 20,000 מחיקות ללא עלות + (1.98 מיליון מחיקות במחיר של 0.02 $ל-100,000 מחיקות) | = | 19.8 * $0.02 | |
0.40 USD ליום * 30 = 12.00 USD |
עלויות אחסון/רשת | |||||||
---|---|---|---|---|---|---|---|
העלות החודשית הכוללת = $30.12/month | |||||||
20KB / DAU של יציאה יומית * 100,000 משתמשים פעילים ביום | = | תעבורת נתונים יוצאת (egress) של 2GB ביום * 30 | = | תעבורת נתונים יוצאת (egress) מהרשת בנפח 60GB מדי חודש | |||
תעבורת נתונים יוצאת (egress) בנפח 10GB ללא עלות + (תעבורת נתונים יוצאת בנפח 50GB * 0.12$ לכל GB) = 6.00 $לחודש | |||||||
אחסון של 15KB ליום לכל הודעה / משתמש פעיל ביום + אחסון של 3KB לכל התקנה1 | = | 45KB של אחסון / משתמש פעיל ביום * 100,000 משתמשים פעילים ביום | = | 4.5GB של אחסון יומי / משתמש פעיל יומי * 30 | = | שימוש חודשי בנפח אחסון של 135GB | |
1GB אחסון ללא עלות + (134GB * 0.18$/GB) = 24.12 $לחודש |
1 מכיוון שההנחה שלנו היא שמספר המשתמשים הפעילים היומיים הוא 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 USD ל-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 לכל משתמש פעיל ביום * מיליון משתמשים פעילים ביום | = | תעבורת נתונים יוצאת (egress) של 20GB ביום * 30 | = | תעבורת נתונים יוצאת (egress) של 600GB ברשת מדי חודש | |||
תעבורת נתונים יוצאת (egress) בנפח 10GB ללא עלות + (תעבורת נתונים יוצאת בנפח 590GB * 0.12$/GB) = 70.80 $ לחודש | |||||||
אחסון של 15KB ליום לכל הודעה / משתמש פעיל ביום + אחסון של 3KB לכל התקנה1 | = | 45KB של נפח אחסון / משתמש פעיל ביום * מיליון משתמשים פעילים ביום | = | 45GB של אחסון יומי / משתמש פעיל יומי * 30 | = | שימוש חודשי בנפח אחסון של 1,350GB | |
(אחסון בנפח 1GB ללא עלות) + (1,349GB * 0.18$/GB) = 242.82$ לחודש |
1 מכיוון שההנחה שלנו היא שמספר המשתמשים הפעילים היומיים הוא 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 / משתמש / יום
שימוש כולל לפי משימת משתמש
בוחרים כל משימת משתמש כדי לראות תיאור מלא ופירוט של העלויות של הפעולות, האחסון והרשת באפליקציה.
לראות את רשימת הצ'אטים
במסך הבית של האפליקציה נטען 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 $לחודש
גדול
(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