דוגמה לתמחור ב-Cloud Firestore

בדוגמה הזו מעולם האמיתי של אפליקציית צ'אט בסיסית תוכלו להעריך את השימוש ב-Cloud Firestore ואת העלויות. זהו אומדן לא מדויק, אבל הוא יכול לעזור לכם להבין טוב יותר איך החיוב מתבצע על השימוש ב-Cloud Firestore.

סקירה כללית: עלויות לפי רמת שימוש

כדי להמחיש את העלויות האופייניות, נבחן אפליקציית צ'אט לדוגמה שבה המשתמשים יכולים ליצור צ'אטים עם שני משתתפים או יותר. המשתמשים יכולים לראות את השיחות הפעילות שלהם ברשימה, לקרוא הודעות ולשלוח הודעות. בדוגמה הזו אנחנו משתמשים בתמחור של מספר אזורים באמריקה הצפונית (במיוחד nam5).

הנחות

כדאי להביא בחשבון את ההנחות הבאות לגבי שימוש ואחסון נתונים:

  • משתמשים פעילים ביום (DAU) הם 10% מכלל התקנות האפליקציה. אפשר להעריך את העלויות היומיות על סמך אומדן גס של מספר המשתמשים הפעילים ביום (DAU). אלה המשתמשים שפותחים את האפליקציה באופן פעיל ומשתמשים בה ביום נתון. בדרך כלל, מדובר בקבוצת משנה קטנה מתוך סך כל התקנות האפליקציה. לצורך החישובים הבאים, הערכה שלנו היא ש-DAU הוא 10% ממספר ההתקנות הכולל של האפליקציה.
  • המסמכים קטנים יחסית. בטבלה הבאה מפורט פירוט של גודל המסמך לפי סוג.
  • הנתונים נשמרים למשך שלושה חודשים בלבד. ההודעות באפליקציית הצ'אט לדוגמה נשמרות למשך שלושה חודשים בלבד. כדי להביא בחשבון את פעולות המחיקה, החישובים הבאים מציגים מחיקה יומית לכל כתיבת יומית.
  • אומדני העלויות האלה משקפים את רוב העלויות של האפליקציה לדוגמה, אבל לא את כולן. כדי לחשב את רוב העלויות של אפליקציה, חישבנו את הפעולות, נפח האחסון של משתמשים והודעות ותעבורת הנתונים היוצאת (egress) של המשימות הנפוצות ביותר שמשתמשים מבצעים, כפי שמתואר במדריך הזה. עם זאת, יכול להיות שתצטרכו להביא בחשבון עלויות נוספות, בהתאם למבנה ולצורכי הנתונים של האפליקציה. תוכלו להיעזר בדוגמה הזו כדי לבצע את החישובים, אבל מומלץ לעיין בדף התמחור כדי לקבל הסברים מפורטים יותר על העלויות של Cloud Firestore.

פירוט של הפעולות לפי משימה של משתמש זמין בקטע פירוט: שימוש לחיוב לפי משימה של משתמש.

קטן
(50,000 התקנות)

עבור 50,000 התקנות של אפליקציה (5,000 משתמשים פעילים ביום): 12.14$ לחודש

עלויות קריאה/כתיבה
העלות החודשית הכוללת = 40.40 ש"ח לחודש
400,000 קריאות יומיות בסך הכול =   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) =   0.8 * 0.18$‎
0.14$ליום * 30 = 4.20 $
 
100,000 מחיקות ביום בסך הכול =   20,000 מחיקה ללא עלות + (80,000 מחיקה ב-0.02 $ל-100,000) =   0.8 * $0.02
0.02$ליום * 30 = 0.60 $
עלויות אחסון/רשתות
העלות החודשית הכוללת = 4.20 ש"ח לחודש
20KB / DAU של תעבורת נתונים יוצאת יומית * 5,000 משתמשים פעילים ביום ‎=   100MB תעבורת נתונים יוצאת יומית * 30 =   תעבורת נתונים יוצאת (egress) ברשת בנפח 3GB לחודש
3GB תעבורת נתונים יוצאת ללא עלות = ללא עלות1
 
אחסון הודעות יומי בנפח 15KB לכל משתמש פעיל ביום + אחסון בנפח 3KB לכל התקנה2 =   45KB אחסון / DAU * 5,000 DAU =   225MB אחסון יומי / משתמש פעיל ביום * 30 =   שימוש חודשי בנפח אחסון של 6.75GB
אחסון בנפח 1GB ללא עלות + (5.75 * 0.18$) = 1.04 $לחודש

Cloud Firestore מקבלים 1 ‎10GB של תעבורת נתונים יוצאת (egress) ברשת לחודש ללא עלות.
2 ההנחה שלנו היא ש-DAU הם 10% מכלל התקנות האפליקציה, ולכן המספר הזה מייצג את המספר הכולל של המשתמשים שהתקינו את האפליקציה.

בינונית
(1 מיליון התקנות)

עבור 1,000,000 התקנות של אפליקציה (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.98 מיליון פעולות כתיבה במחיר של 0.18 $ל-100,000) =   19.8 * 0.18$
‎3.56$‎ ליום * 30 = ‎106.80 $‎
 
2 מיליון מחיקות ביום בסך הכול =   20,000 מחיקה ללא עלות + (1.98 מיליון מחיקה ב-0.02 $לכל 100,000) =   19.8 * $0.02
0.40$ליום * 30 = 12.00 $
עלויות אחסון/רשתות
העלות החודשית הכוללת = 30.12 $לחודש
20KB / DAU של תעבורת נתונים יוצאת יומית * 100,000 משתמשים פעילים ביום ‎=   2GB של תעבורת נתונים יוצאת (egress) ביום * 30 =   תעבורת נתונים יוצאת (egress) ברשת בנפח 60GB לחודש
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 $ל-100,000 שורות) ‎=   199.8 * 0.18$
‎$35.96 ליום * 30 = $1,078.80
 
20 מיליון מחקות ביום בסך הכול =   20,000 מחיקה ללא עלות + (19.98 מיליון מחיקה במחיר של 0.02 $לכל 100,000) =   199.8 * 0.02$
‎$4.00 / day * 30 = $120.00
עלויות אחסון/רשתות
העלות החודשית הכוללת = 313.62 $לחודש
20KB / DAU של תעבורת נתונים יוצאת יומית * ‏1 מיליון DAU ‎=   20GB של תעבורת נתונים יוצאת (egress) מדי יום * 30 =   תעבורת נתונים יוצאת (egress) של 600GB בחודש
10GB תעבורת נתונים יוצאת ללא עלות + (590GB תעבורת נתונים יוצאת * ‏0.12$ ל-GB) = ‏70.80 $לחודש
 
אחסון הודעות יומי בנפח 15KB לכל משתמש פעיל ביום + אחסון בנפח 3KB לכל התקנה1 =   45KB אחסון / DAU * ‏ 1 מיליון DAU =   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 לכל משתמש ביום
  • אחסון: (20 * 0.75KB) = 15KB ליום לכל משתמש

סה"כ שימוש לפי משימה של משתמש

בוחרים כל משימה של משתמש כדי לראות תיאור מלא ופירוט של העלויות של הפעולות, האחסון והרשתות באפליקציה.

הצגת רשימת הצ'אטים

במסך הבית של האפליקציה נטענים 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 $לחודש

בינונית
(1 מיליון התקנות)

עבור 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,‏ Analytics,‏ Crashlytics,‏ מעקב ביצועים והגדרת תצורה מרחוק. מידע נוסף על מוצרים אחרים של Firebase ומידע על התמחור ב-Firebase