הסבר על החיוב ב-Cloud Firestore

במסמך הזה מפורטים פרטי התמחור של Cloud Firestore.

אם אתם משלמים במטבע שאינו דולר ארה"ב, יחולו המחירים הרשומים במטבע שלכם במק"טים של Cloud Platform.

סקירה כללית על תמחור

כשמשתמשים ב-Cloud Firestore, מחויבים על הפעולות הבאות:

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

השימוש בנפח האחסון וברוחב הפס מחושב בגיביבייט (GiB), כאשר ‎1 GiB = 230 bytes. כל החיובים מצטברים מדי יום.

בקטעים הבאים מפורט אופן החיוב על השימוש ב-Cloud Firestore.

מכסה ללא תשלום

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

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

בטבלה הבאה מפורטות מכסות השימוש בחינם:

תוכנית ללא תשלום מכסה
נתונים מאוחסנים ‫1 GiB
קריאות של מסמכים ‫50,000 ביום
כתיבה במסמך ‫20,000 ביום
מחיקות של מסמכים ‫20,000 ביום
העברת נתונים יוצאת ‫10GB לחודש

הפעולות והתכונות הבאות לא כוללות שימוש בחינם. כדי להשתמש בתכונות האלה, צריך להפעיל את החיוב:

  • מחיקות של TTL
  • נתוני PITR
  • גיבוי נתונים
  • שחזור פעולות
  • פעולות שכפול

מידע נוסף על החיוב על התכונות האלה זמין במאמר בנושא תמחור אחסון.

תמחור לפי מיקום

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

אם אתם משלמים במטבע שאינו דולר ארה"ב, יחולו המחירים הרשומים במטבע שלכם במק"טים של Cloud Platform.

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

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

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

קריאה, כתיבה ומחיקה

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

החיובים על פעולות כתיבה ומחיקה הם פשוטים. בפעולות כתיבה, כל פעולה של set או update נספרת כפעולת כתיבה אחת.

יש כמה ניואנסים שחשוב לזכור לגבי חיובים על פעולות קריאה. בקטעים הבאים מוסברות הניואנסים האלה בפירוט.

קריאות של רשומות באינדקס

אתם מחויבים בפעולת קריאה אחת לכל קבוצה של עד 1,000 רשומות אינדקס שנקראות על ידי שאילתה, למעט במקרים הבאים:

  • במקרה של שאילתות חיפוש של וקטורים של K השכנים הקרובים ביותר, תחויבו על פעולת קריאה אחת לכל אצווה של עד 100 רשומות באינדקס הווקטורים של kNN שנקראות על ידי השאילתה.

    לדוגמה, אם שאילתת החיפוש הבאה של וקטורים עם limit: 5 מחזירה 5 מסמכים וקוראת 1,550 רשומות של אינדקס וקטורים של kNN, תחויבו ב-5 פעולות קריאה של המסמכים שהוחזרו וב-16 פעולות קריאה של רשומות האינדקס:

    // Requires single-field vector index
    const vectorQuery: VectorQuery = db.collection('cities').findNearest('embedding_field', FieldValue.vector([3.0, 1.0, 2.0]), {
      limit: 5,
      distanceMeasure: 'EUCLIDEAN'
    });
    
  • אין חיוב על שאילתות שיש בהן עד שדה טווח אחד, עבור רשומות אינדקס שנקראו.

    לדוגמה, השאילתה הבאה מכילה שדה שוויון אחד (age) ושדה טווח אחד (start_date), ולא נגבה תשלום על רשומות האינדקס שנקראו:

    db.collection("employees").whereEqualTo("age", 35)
                              .whereGreaterThanOrEqualTo("start_date", new Date(2020, 1, 1))
    

    השאילתה הבאה מכילה שני שדות של טווחים (age ו-start_date) והחיוב עליה הוא על קריאות של רשומות באינדקס:

    db.collection("employees").whereGreaterThanOrEqualTo("age", 35)
                              .whereGreaterThanOrEqualTo("start_date", new Date(2020, 1, 1))
    

    שדה שמופיע בסעיף order by נחשב לשדה טווח אם יש לפחות עוד שדה טווח אחד בשאילתה. לכן השאילתה הבאה מכילה שני שדות של טווחים (age ו-start_date) ומתבצע חיוב על קריאות של רשומות באינדקס:

    db.collection("employees").whereGreaterThanOrEqualTo("age", 35)
                              .orderBy("start_date")
    

    השדה __name__ תמיד נחשב לשדה טווח, גם אם הוא משמש רק במסנן שוויון. לכן השאילתה הבאה מכילה שני שדות של טווח (age ו-__name__) ומתבצע חיוב על קריאות של רשומות באינדקס:

    db.collection("employees").whereIn("__name__", Arrays.asList("/employees/Alice", "/employees/Bob"))
                              .orderBy("age")
    

שאילתות צבירה

עבור שאילתות צבירה כמו count(), ‏ sum() ו-avg(), החיוב הוא על רשומות האינדקס שנקראות על ידי השאילתה, כפי שמתואר למעלה. לשאילתות צבירה שקוראות 0 רשומות באינדקס, יש חיוב מינימלי של קריאת מסמך אחד.

לדוגמה, על count() פעולות שקוראות בין 0 ל-1,000 רשומות אינדקס מחויבות כקריאה של מסמך אחד. על count() פעולה שקוראת 1,500 רשומות אינדקס, תחויבו על 2 קריאות מסמכים.

כדי לקבל מידע נוסף על האינדקסים שבהם נעשה שימוש ועל רשומות האינדקס שנקראו, אפשר להשתמש בQuery Explain.

האזנה לתוצאות של שאילתות

Cloud Firestore מאפשרת להאזין לתוצאות של שאילתה ולקבל עדכונים בזמן אמת כשתוצאות השאילתה משתנות.

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

החיוב על מאזינים בערכות SDK לנייד ולאינטרנט תלוי גם בהגדרה של שמירת נתונים במצב אופליין:

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

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

ניהול של קבוצות גדולות של תוצאות

Cloud Firestore כולל כמה תכונות שיעזרו לכם לנהל שאילתות שמחזירות מספר גדול של תוצאות:

  • סמנים, שמאפשרים לכם להמשיך שאילתה שפועלת במשך זמן רב.
  • אסימוני דפים, שעוזרים להציג את תוצאות השאילתה בדפים.
  • מגבלות, שמציינות כמה תוצאות לאחזר.
  • Offsets, which allow you to skip a fixed number of documents.

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

עם זאת, כששולחים שאילתה שכוללת היסט, מחויבים על קריאה לכל מסמך שדילגתם עליו. לדוגמה, אם בשאילתה שלכם נעשה שימוש בהיסט של 10, והשאילתה מחזירה מסמך אחד, תחויבו על 11 קריאות. בגלל העלות הנוספת הזו, מומלץ להשתמש בסמני מיקום במקום בהיסטים, בכל הזדמנות.

שאילתות שאינן קריאות של מסמכים

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

חיוב מינימלי על שאילתות

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

Cloud Firestore Security Rules

בספריות לקוח לנייד ולאינטרנט, אם Cloud Firestore Security Rules משתמש ב-exists(), ב-get() או ב-getAfter() כדי לקרוא מסמך אחד או יותר מהמסד הנתונים, תחויבו על קריאות נוספות באופן הבא:

  • אתם מחויבים על קריאות שנדרשות כדי להעריך את Cloud Firestore Security Rules.

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

    תחויבו רק על קריאה אחת לכל מסמך תלוי, גם אם הכללים שלכם מפנים למסמך הזה יותר מפעם אחת.

  • החיוב על הערכת הכללים מתבצע פעם אחת בלבד לכל בקשה.

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

  • כשמקשיבים לתוצאות של שאילתה, נחייב אתכם על הערכת הכלל בכל אחד מהמקרים הבאים:

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

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

החיוב הוא על כמות הנתונים שמאוחסנים ב-Cloud Firestore, כולל תקורה של אחסון. התקורה כוללת מטא-נתונים, אינדקסים אוטומטיים ואינדקסים מורכבים.

כל מסמך שמאוחסן ב-Cloud Firestore צריך לכלול את המטא-נתונים הבאים:

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

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

Cloud Firestore מידע על חישוב נפח האחסון זמין במאמר חישוב נפח האחסון.

נתוני PITR

אם מפעילים PITR, מחויבים על אחסון נתוני PITR. רוב הלקוחות יגלו שהעלות הכוללת של אחסון נתוני PiTR דומה לעלות האחסון של מסד הנתונים.

עלויות האחסון של PITR הן ב-GiB לחודש ומחושבות מדי יום. Cloud Firestore מדידה של גודל מסד הנתונים מדי יום. במהלך חודש, הממוצע של נקודות הדגימה האלה משמש לחישוב גודל האחסון של מסד הנתונים. הערך הממוצע הזה מוכפל במחיר ליחידה של PITR (חודש-‎GiB).

לדוגמה, אם הגודל הממוצע של מסד הנתונים במהלך חודש הוא 1GiB וה-PITR מופעל למשך כל החודש, אז גודל הנתונים של ה-PITR שניתן לחיוב הוא גם 1GiB.

חיוב מינימלי: יכול להיות שתחויבו בעלות של עד יום אחד של אחסון PITR גם אם תשביתו את PITR תוך יום אחד אחרי ההפעלה.

גיבוי נתונים ופעולות שחזור

אם מפעילים גיבויים, מחויבים על נפח האחסון של הגיבויים של מסד הנתונים. גודל האחסון של הגיבוי שווה לגודל האחסון של מסד הנתונים בזמן יצירת הגיבוי.

עלויות האחסון של הגיבויים הן ב-GiB לחודש. במהלך חודש, המערכת גם מחשבת את מספר הימים שבהם כל גיבוי נשמר, בממוצע לחודש. העלות של כל גיבוי מחושבת לפי נפח האחסון של הגיבוי כפול החלק היחסי של החודש שבו הגיבוי נשמר, כפול מחיר היחידה. גבולות היום מוגדרים לפי אזור הזמן America/Los_Angeles למטרות חיוב.

כשמבצעים פעולת שחזור, Cloud Firestore מודד את גודל הגיבוי לצורך פעולת השחזור. גודל הגיבוי מוכפל במחיר ליחידה של פעולות שחזור (GiB).

הסבר על שאילתה

השימוש ב-Firestore Query Explain כרוך בעלויות.

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

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

רוחב פס ברשת

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

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

כדי לדעת כמה רוחב פס ברשת השתמשתם, אתם יכולים להשתמש במסוף Google Cloud כדי לייצא את נתוני החיוב לקובץ.

תמחור כללי של רשתות

על בקשות שמקורן ב-Google Cloud Platform (לדוגמה, מאפליקציה שפועלת ב-Google Compute Engine), תחויבו באופן הבא:

סוג תנועה מחיר
העברת נתונים נכנסת חינם
העברת נתונים בתוך אזור חינם
העברת נתונים בין אזורים באותו אזור גיאוגרפי מרובה חינם
העברת נתונים בין אזורים בארה"ב (לכל ‎GiB) ‫0.01$‎ (ה-10GiB הראשונים בכל חודש הם בחינם)
העברת נתונים בין אזורים, לא כולל תנועת משתמשים בין אזורים בארה"ב תעריפים של העברת נתונים יוצאים באינטרנט ב-Google Cloud Platform

אם אתם משלמים במטבע שאינו דולר ארה"ב, יחולו המחירים הרשומים במטבע שלכם במק"טים של Cloud Platform.

Cloud Firestore כפוף גם לחיובים נוספים על יציאת נתונים מהאינטרנט במקרים הבאים:

  • בקשות Google Cloud בין אזורים, לא כולל תנועה בין אזורים בארה"ב
  • בקשות שמגיעות מחוץ ל-Google Cloud (לדוגמה, ממכשיר נייד של משתמש)

Google Cloudמידע נוסף על תעריפי יציאה של אינטרנט

דוגמה לתמחור

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

ניהול ההוצאות

כדי להימנע מחיובים לא צפויים בחשבון, כדאי להגדיר תקציבים והתראות חודשיים באמצעות מסוף החיוב של Google Cloud.

כדי לעקוב אחרי השימוש ב-Cloud Firestore, פותחים את Cloud Firestore הכרטיסייה Usage במסוף Firebase. אפשר להשתמש בלוח הבקרה כדי לאמוד את השימוש בתקופות זמן שונות.