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

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

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

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

הנחות

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

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

אפשר לראות פירוט של הפעולות לפי משימת משתמש: פירוט: שימוש שחויב לפי משימה של משתמש.

קטן
(50 אלף התקנות)

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

עלויות קריאה/כתיבה
עלות חודשית כוללת = 44.40 ש"ח לחודש
400,000 קריאה יומית בסך הכול = 50,000 קריאה ללא עלות + (350,000 קריאה במחיר של $0.06/100,000) = 3.5 * 0.06$
0.81 ש"ח ליום * 30 = 6.30$
 
100,000 כתבי יד ביום בסך הכול ‎=   20,000 לכתיבה ללא עלות + (80,000 לכתיבה במחיר של $0.18/100,000) = 0.8 * 0.18$
0.64 ש"ח ליום * 30 = 16.80 ש"ח
 
100,000 מחיקות ביום בסך הכול = 20,000 מחיקות ללא עלות + (80,000 מחיקות לפי $0.02/100,000) ‎=   0.8 * 0.02$
0.02$ליום * 30 = 2.60 $
עלויות אחסון/רשתות
עלות חודשית כוללת = 4.06 ש"ח לחודש
20KB / DAU של תעבורת נתונים יוצאת יומית * 5,000 משתמשים פעילים ביום ‎=   100MB של תעבורת נתונים יוצאת (egress) יומית * 30 = תעבורת נתונים יוצאת (egress) חודשית של 3GB ברשת
תעבורת נתונים יוצאת (egress) ללא עלות של 3GB = ללא עלות1
 
אחסון הודעות יומי בנפח 15KB לכל משתמש פעיל ביום + אחסון בנפח 3KB לכל התקנה2 = 45KB לאחסון / DAU * 5,000 DAU = 225MB אחסון יומי / משתמש פעיל ביום * 30 ‎=   נפח אחסון של 6.75GB לחודש
נפח אחסון של 1GB ללא עלות + (5.75 * 0.18$) = 1.04 $לחודש

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

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

עבור 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 אלף$) = 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 של תעבורת נתונים יוצאת (egress) יומית * 100,000 DAUs ‎=   2GB של תעבורת נתונים יוצאת (egress) יומית * 30 =   תעבורת נתונים יוצאת (egress) חודשית של 60GB ברשת
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 משתמשים פעילים ביום): 1,1804 ש"ח

עלויות קריאה/כתיבה
עלות חודשית כוללת = סה"כ: 2637.90$ לחודש
80 מיליון קריאה יומית בסך הכול = 50,000 קריאה ללא עלות + (79.95 מיליון קריאה ב-0.06/100K) = 799.5 * 0.06$
47.97$ליום * 30 = $1,439.10
 
20 מיליון דולר בסך הכול מדי יום =   20,000 לכתיבה ללא עלות + (19.98 מיליון כותבים ב-0.18/100K) ‎=   199.8$ * 0.18$
35.96$ליום * 30 = 1078.80 $
 
20 מיליון מחקות ביום בסך הכול = 20,000 מחיקה ללא עלות + (19.98 מיליון מחיקה במחיר של 0.02$ לכל 100,000) = 199.8 * $0.02
16 ש"ח ליום כפול 30 = 480 ש"ח
עלויות אחסון/רשתות
עלות חודשית כוללת = 313.62 $לחודש
20KB / DAU של תעבורת נתונים יוצאת יומית * ‏1 מיליון DAU = 20GB של תעבורת נתונים יוצאת (egress) יומית * 30 ‎=   תעבורת נתונים יוצאת (egress) חודשית של 600GB ברשת
תעבורת נתונים יוצאת (egress) ללא עלות של 10GB + (תעבורת נתונים יוצאת (egress) של 590GB * 0.12$ ל-GB) = 70.80 $לחודש
 
15KB נפח אחסון יומי להודעות / DAU + נפח אחסון של 3KB / התקנה1 = 45KB נפח אחסון / DAU * 1 מיליון DAU = אחסון יומי בנפח 45GB / DAU * 30 = נפח אחסון של 1350GB לחודש
(1GB אחסון ללא עלות) + (1,349GB * ‏0.18$‎/GB) = ‏242.82$‎ לחודש

1 מאחר שההנחה שלנו היא שמספר המשתמשים הפעילים מדי יום הוא 10% מתוך סך כל ההתקנות של האפליקציה, המספר הזה מייצג את המספר הכולל של המשתמשים שהתקינו את האפליקציה.

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

פירוט: שימוש בחיוב לפי משימה של משתמש

עבור אפליקציית Chat לדוגמה, מבנה הנתונים הוא:

  • 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 אלף התקנות)

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