דוגמה לחיוב
הדוגמה הבאה היא של אפליקציית צ'אט בסיסית, ותוכלו להשתמש בה כדי להעריך את השימוש שלכם ב-Firestore במצב Native ואת העלויות. זו לא הערכה מדויקת, אבל היא יכולה לעזור לכם להבין טוב יותר איך החיוב על השימוש ב-Firestore במצב Native מתבצע.
סקירה כללית: עלויות לפי רמת שימוש
כדי להמחיש את העלויות האופייניות, נתייחס לדוגמה של אפליקציית צ'אט שבה המשתמשים יכולים לפתוח שיחות עם שני משתתפים או יותר. המשתמשים יכולים לראות את הצ'אטים הפעילים שלהם ברשימה, לקרוא הודעות ולשלוח הודעות. בדוגמה הזו, אנחנו משתמשים בתמחור של אזור צפון אמריקה שכולל כמה אזורים (בספציפיות nam5).
הנחות
חשוב להביא בחשבון את ההנחות הבאות לגבי השימוש באחסון הנתונים:
- מספר המשתמשים הפעילים ביום (DAU) הוא 10% מסך ההתקנות של האפליקציה. אתם יכולים לאמוד את העלויות היומיות שלכם באמצעות אומדן גס של מספר המשתמשים הפעילים ביום (DAU). אלה המשתמשים שפותחים את האפליקציה שלכם ומשתמשים בה באופן פעיל ביום מסוים. בדרך כלל מדובר בקבוצת משנה קטנה מתוך סך ההתקנות של האפליקציה. בחישובים שלמטה, הערכנו את מספר המשתמשים הפעילים היומיים כ-10% ממספר ההתקנות הכולל של האפליקציה.
- גודלי המסמכים קטנים יחסית. בטבלה שלמטה מפורטים גדלי המסמכים לפי סוג.
- הנתונים נשמרים למשך שלושה חודשים בלבד. ההודעות באפליקציית הצ'אט לדוגמה נשמרות רק למשך שלושה חודשים. כדי להסביר את פעולות המחיקה, בחישובים הבאים מוצגת מחיקה יומית לכל כתיבה יומית.
- ההערכות האלה של העלויות משקפות את רוב העלויות של האפליקציה לדוגמה, אבל לא את כולן. חישבנו את רוב העלויות של האפליקציה על ידי חישוב של פעולות, אחסון של משתמשים והודעות, ויציאה (egress) עבור המשימות הכי נפוצות של המשתמשים שמפורטות במדריך הזה. עם זאת, יכול להיות שתצטרכו לקחת בחשבון עלויות נוספות, בהתאם למבנה של האפליקציה ולצרכים של הנתונים. אתם יכולים להשתמש בדוגמה הזו כדי להנחות את החישובים שלכם, אבל מומלץ לעיין בדף התמחור כדי לקבל הסברים מפורטים יותר על העלויות של Firestore במצב Native.
פירוט של הפעולות לפי משימת משתמש מופיע בקטע פירוט: שימוש מחויב לפי משימת משתמש.
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 מדי חודש היא ללא עלות ב-Firestore במצב Native.
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% ממספר ההתקנות הכולל של האפליקציה, המספר הזה מייצג את המספר הכולל של המשתמשים שהתקינו את האפליקציה.
יתרון חשוב של מודל החיוב של Firestore במצב Native הוא שמשלמים רק על מה שמשתמשים בו. כתוצאה מכך, יכול להיות שהסכום בחשבון שלכם יגדל או יקטן בהתאם למספר המשתמשים הפעילים היומי.
פירוט: שימוש מחויב לפי משימת משתמש
בדוגמה של אפליקציית הצ'אט, מבנה הנתונים הוא כזה:
-
users/{userId}— רשומות משתמשים groups/{groupId}— שיחות צ'אט בין 2 משתמשים או יותר-
messages/{messageId}– כל הודעה בצ'אט.
-
אחסון הנתונים
כדי לחשב את עלויות האחסון של נתוני האפליקציה, צריך להשתמש בהנחות הבאות לגבי גודלי המסמכים:
| אוסף | גודל המסמך (בזמן ההעברה) | גודל המסמך (בדיסק)* |
|---|---|---|
| משתמשים | 1KB | 3KB |
| קבוצות | 0.5KB | 1.5KB |
| הודעות | 0.25KB | 0.75KB |
*חישוב הגודל הזה כולל אינדקסים לשדות ההודעה, אבל מניח שהוספת אינדקסים לתוכן ההודעה מושבתת.
בנוסף, האפליקציה מאחסנת רק הודעות בנות עד שלושה חודשים, כדי להקטין את עלויות האחסון.
מידע נוסף על חישוב עלויות האחסון זמין במאמר הסבר על חישוב גודל האחסון.
תפעול
בדרך כלל המשתמשים מבצעים באפליקציה את המשימות הנפוצות הבאות:
- לראות את רשימת הצ'אטים: המשתמשים פותחים את מסך הבית של האפליקציה ורואים רשימה של צ'אטים (קבוצתיים וישירים) שממוינים לפי ההודעה האחרונה שפורסמה.
- קריאת הודעות בצ'אט: המשתמשים בוחרים צ'אטים ממסך הבית וקוראים את ההודעות האחרונות בצ'אטים.
- שליחת הודעה בצ'אט: משתמשים שולחים הודעות בצ'אטים (קבוצתיים או ישירים).
האומדן של סך הפעולות באפליקציה לדוגמה ב-Firestore במצב Native עבור שלוש משימות משתמש טיפוסיות הוא כדלקמן:
- קריאות: (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$ לחודש