בדף הזה מופיעות דוגמאות לחישוב יחידות החיוב בתרחישים נפוצים. חשוב לזכור שכל שאילתה עשויה להיות שונה מבחינת הנתונים שעוברים עיבוד, בהתאם לגורמים כמו תוכנית השאילתה, צורת הנתונים והאינדקסים שזמינים.
מומלץ להשתמש בתכונה Query Explain כדי להבין טוב יותר את העלות והביצועים של השאילתות הספציפיות שלכם.
פעולות קריאה
רוב פעולות הקריאה כוללות ביצוע קריאה של מסמך ספציפי או סריקה של טווח נתונים על סמך מזהה. פעולות קריאה צורכות יחידות קריאה. דוגמאות מפורטות בהמשך.
חיפוש טקסט מלא
החיובים על שאילתות של חיפוש טקסט מלא מובחנים בין העלות של ביצוע חיפוש באינדקס טקסט לבין העלות של אחזור המסמכים. העלות של ביצוע חיפוש באינדקס טקסט נקבעת לפי מורכבות השאילתה וכמות הנתונים שנסרקים באינדקס כדי למצוא את התוצאות. הגורמים שמשפיעים על העלות הזו כוללים את המספר והאופי של מונחי החיפוש (לדוגמה, מונחים, ביטויים), אם מוחל דירוג רלוונטיות ומספר רשומות האינדקס שצריך לבדוק. העלות של אחזור מסמכים רלוונטיים מבוססת על המספר והגודל של המסמכים שאוחזרו אחרי השלמת שלב החיפוש.
בטבלה הבאה מפורטים החיובים שקשורים להרצת שאילתות של חיפוש טקסט מלא בקטלוג מוצרים של מסחר אלקטרוני למשתלת צמחים. בדוגמה הזו מניחים שיש אוסף של 200,000 כרטיסי מוצר, שכל מסמך של כרטיס מוצר הוא בגודל 2KiB, וגודל אינדקס החיפוש המתאים הוא בערך 100MiB.
| שאילתה | קוד לדוגמה | יחידות קריאה משוערות שנצרכו לכל שאילתה | עלויות משוערות (אזור: us-central1 בדולר ארה"ב) |
|---|---|---|---|
| חיפוש של מוצר נדיר מסוג מגש שטוח של "מים יבשים", שמביא לשליפה של 3 מסמכים. | |
10 יחידות קריאה בסך הכול על סמך 7 יחידות לחיפוש טקסט מלא ו-3 יחידות נוספות למסמכים שהוחזרו. |
0.50$ למיליון שאילתות |
| חיפוש של כל עצי ההדר לגידול בתוך הבית, שמביא לאחזור של 36 מסמכים. | |
42 יחידות קריאה בסך הכול על סמך 6 יחידות לחיפוש טקסט מלא ו-36 יחידות נוספות למסמכים שהוחזרו. |
2.10$ למיליון שאילתות |
| חיפוש של עציצים למרפסת שמוצא הרבה מוצרים תואמים. מיון התוצאות לפי רלוונטיות, והגבלת התוצאות ל-50 הראשונות. | |
75 יחידות קריאה בסך הכול על סמך 25 יחידות לחיפוש טקסט מלא ו-50 יחידות נוספות למסמכים שהוחזרו. |
3.75$ למיליון שאילתות |
בדוגמאות האלה אפשר לראות איך דפוסי שאילתות שונים משפיעים על העלויות:
- השאילתה 'מים יבשים' כוללת ביטוי (
"dry water") ומונחים נוספים. חיפושים של צירופי מילים הם מורכבים יותר, כי מנוע השאילתות צריך לבדוק את הקרבה והסדר של הטוקנים, ולכן הם תורמים 7 יחידות קריאה לשלב החיפוש. מכיוון שרק מעט מסמכים תואמים, עלות אחזור המסמכים נמוכה. - השאילתה "עץ" "הדרים" "בתוך הבית" מחפשת שלושה מונחים נפרדים. החיפוש הזה קצת פחות מורכב מחיפוש של צירוף מילים, אבל עדיין צריך לחפש כמה טוקנים. העלות של סריקת אינדקס החיפוש מעט נמוכה יותר, 6 יחידות קריאה, בהשוואה לדוגמה של 'מים יבשים', אבל מוחזרים 36 מסמכים, ולכן העלות הכוללת גבוהה יותר.
- לשאילתת החיפוש balcony planter יש את העלות הכי גבוהה של חיפוש טקסט מלא, 25 יחידות, בהפרש משמעותי. הסיבה העיקרית לכך היא שהבקשה היא למיין את התוצאות לפי רלוונטיות (
.sort({score: {$meta: "textScore"}})) במונחים שתואמים להרבה מסמכים. כדי לקבוע מהן 50 התוצאות הכי רלוונטיות, מנוע השאילתות צריך למצוא את כל ההתאמות האפשריות למונחים balcony או planter, לחשב ציון רלוונטיות לכל אחת מהן ואז למיין אותן. תהליך הניקוד והמיון הזה של מספר גדול של מועמדים באינדקס דורש הרבה משאבי מחשוב, גם אם בסופו של דבר מאוחזרים רק 50 מסמכים. הרוחב של המונחים בשילוב עם התקורה של ניקוד הרלוונטיות מייקרים את שלב החיפוש.
שאילתות גיאו-מרחביות
החיובים על שאילתות גיאו-מרחביות נקבעים לפי מורכבות השאילתה, התנאים והמיון הספציפיים שנעשה בהם שימוש, וגם לפי המשאבים שנדרשים לסריקת כל הנתונים באינדקס הגיאו-מרחבי הרלוונטי.
בטבלה הבאה מפורטים החיובים שקשורים להרצת שאילתות גיאו-מרחביות באפליקציית מפות. בדוגמה הזו,נניח שיש אוסף של 1,000, 000 מסמכים שמייצגים נקודות עניין, וכל מסמך של נקודת עניין הוא בגודל 1KiB. גודל האינדקס הגיאוגרפי התואם הוא בערך 60MiB.
| שאילתה | קוד לדוגמה | יחידות קריאה משוערות שנצרכו לכל שאילתה | עלויות משוערות (אזור: us-central1 בדולר ארה"ב) |
|---|---|---|---|
| חיפוש כל הנקודות שמעניינות אותי במרחק של עד 10 ק"מ, והחזרת 10 תוצאות. | |
16 יחידות קריאה בסך הכול. על סמך 6 יחידות קריאה לשאילתת מיקום גיאוגרפי ו-10 יחידות נוספות למסמכים שהוחזרו. |
$0.80 למיליון שאילתות |
| תמצא את כל המקומות שמעניינים אותי במרחק של עד 100 ק"מ, ותחזיר את 10 המקומות הכי קרובים מתוך 1,000 התאמות | |
19 יחידות קריאה בסך הכול. על סמך 9 יחידות קריאה לשאילתת מיקום גיאוגרפי ו-10 יחידות נוספות למסמכים שהוחזרו. |
0.95$ למיליון שאילתות |
בדוגמאות האלה אפשר לראות איך דפוסי שאילתות שונים משפיעים על העלויות:
- שאילתה לחיפוש רדיוס של 10 ק"מ: השאילתה הזו סורקת אזור גיאוגרפי קטן יותר. מכיוון שהמערכת מוצאת רק 10 התאמות ברדיוס של 10 ק"מ, מנוע השאילתות צריך לבצע פחות עבודה כדי לזהות את הנקודות האלה ולסדר אותן לפי מרחק (כמו שקורה באופן מרומז בשאילתה
$near). כתוצאה מכך, עלות הסריקה של האינדקס תהיה נמוכה יותר ותסתכם ב-6 יחידות קריאה. - שאילתה עם רדיוס של 100 ק"מ: השאילתה הזו מכסה אזור גדול בהרבה. השאילתה מוצאת 1,000 התאמות פוטנציאליות ברדיוס של 100 ק"מ. כדי למלא את הבקשה ל-10 הנקודות הקרובות ביותר, מנוע השאילתות צריך לחשב מרחקים ולמיין קבוצה גדולה בהרבה של מועמדים (עד 1,000 נקודות) באינדקס. העבודה החישובית הנוספת של סינון ודירוג של הרבה יותר נקודות היא הסיבה לכך שעלות השאילתה הגיאו-מרחבית גבוהה יותר – 9 יחידות קריאה, לעומת השאילתה של 10 ק"מ, למרות שגם היא מחזירה רק 10 מסמכים.
קריאות נקודתיות
דוגמה לחיוב על קריאות נקודתיות:
- קריאת נקודה של מסמך יחיד בגודל 1KiB. צריכה: יחידת קריאה אחת
- קריאה נקודתית של מסמך יחיד בגודל 4KiB. צריכה: יחידת קריאה אחת
- קריאה נקודתית של מסמך יחיד בגודל 1 MiB. צריכה: 256 יחידות קריאה
- קריאת נקודה של 100 מסמכים, כל אחד בגודל 1KiB. צריכה: 100 יחידות קריאה
סריקה
הדוגמאות הבאות כוללות תרחישים שבהם מתבצעת סריקה של מסמכים או של רשומות באינדקס.
סריקת מסמכים
- שאילתה שסורקת 100 מסמכים, כל אחד בגודל 1KiB. צריכה: 25 יחידות קריאה
סריקת אינדקסים
עלות הסריקה, במונחים של בייטים, זהה בין אם מדובר במסמך או באינדקס שנסרקים. עם זאת, גודל הרשומות באינדקס לרוב קטן יותר. לכן, הן יכולות לספק דרך חסכונית יותר לסריקת נתונים.
- שאילתה שסורקת 100 רשומות באינדקס, כל אחת בגודל 1KiB. השימוש: 25 יחידות קריאה.
- שאילתה שסורקת 100 רשומות באינדקס, כל אחת בגודל 128 בייט. השימוש: 4 יחידות קריאה.
גודל מינימלי של מסמך או של רשומה באינדקס
במצבים מסוימים, יכול להיות שלא יהיה צורך לקרוא את התוכן של מסמך או של רשומה באינדקס כדי לענות על שאילתה. היא כוללת שאילתות פשוטות של ספירה, כמו ספירת המספר הכולל של מסמכים באוסף. במקרים כאלה, חלה עלות מינימלית של 32 בייט לכל פריט שנסרק.
- ספירת מספר המסמכים באוסף. השאילתה סורקת 1,000 פריטים באוסף. השימוש הוא: 8 יחידות קריאה.
שילוב של סריקה וקריאת נקודה
הרבה שאילתות מבצעות שילוב של סריקות וקריאות נקודתיות כדי לבצע פעולה.
- שאילתה שסורקת 128 רשומות אינדקס, כל אחת בגודל 256 בייט, ומבצעת קריאה נקודתית של 128 מסמכים, כל אחד בגודל 4KiB. השימוש: 136 יחידות קריאה, שכוללות:
- 128 יחידות קריאה לקריאות של נקודות
- 8 יחידות קריאה לסריקות של אינדקסים
הסבר על שאילתה
Query Explain עוזר להבין איך מסד הנתונים מבצע את השאילתות. הפרטים שסופקו יכולים לעזור לכם לבצע אופטימיזציה של השאילתות.
העלויות הבאות חלות כשמשתמשים ב-Query Explain:
- Query Explain שמריץ את השאילתה: חלה עלות על השאילתה.
- הפעלת Query Explain באמצעות האפשרות plan only (תוכנית בלבד). צריכה: יחידת קריאה אחת (העלות המינימלית של שאילתה)
פעולות כתיבה
פעולות כתיבה (יצירה, עדכון ומחיקה) מחויבות על סמך הגודל של המסמכים והאינדקסים שנוצרים, משתנים או נמחקים במהלך הפעולה. פעולות כתיבה צורכות יחידות כתיבה. יחידות הכתיבה מחושבות במנות של 1 KiB.
פעולות כתיבה פשוטות, כמו עדכון לפי מזהה מסמך, כרוכות רק בעלות של פעולות הכתיבה. בפעולות כתיבה שדורשות שאילתה כדי להשלים את הפעולה, יתווספו גם עלויות הקריאה שקשורות לשאילתה.
דוגמאות מפורטות בהמשך.
יצירה
- יוצרים מסמך חדש בגודל 10KiB ללא אינדקסים. צריכה: 10 יחידות כתיבה
- ליצור מסמך בגודל 1KiB עם רשומה אחת של אינדקס בגודל 256 בייט באוסף. צריכה: 2 יחידות כתיבה
עדכונים
- חיפוש מסמך בגודל 10KiB לפי מזהה המסמך ועדכון שלו ללא אינדקסים באוסף. צריכה: 10 יחידות כתיבה
- חיפוש מסמך בגודל 1KiB לפי מזהה המסמך ועדכון שדה אחד עם רשומה אחת באינדקס בגודל 256 בייט. השימוש: 3 יחידות כתיבה. הערה: עדכון של רשומה באינדקס במצב הזה צורך 2 יחידות כתיבה – אחת למחיקה ואחת ליצירה מחדש של הרשומה באינדקס.
- חיפוש מסמך בגודל 1KB לפי מזהה המסמך ועדכון שלו בלי לבצע שינויים. צריכה: יחידת כתיבה אחת (העלויות המינימליות של כתיבה)
- שאילתה על כל המסמכים בגודל 1KiB באוסף, שסורקת 1,000 מסמכים, והוספה של שדה חדש בגודל 256 בייט ללא אינדקסים באוסף: 1,000 יחידות קריאה ו-1,000 יחידות כתיבה.
מחיקות
- מחיקת מסמך בגודל 1KiB, שיש לו אינדקס אחד באוסף. צריכה: 2 יחידות כתיבה
- מחיקת מסמך בגודל 1KiB, שלא כולל אינדקסים באוסף. צריכה: יחידת כתיבה אחת
יצירת אינדקסים
במהלך פעולת בניית האינדקס, המערכת מחייבת על רשומות האינדקס שנוצרו או שונו. העלויות האלה נצברות בכל פעם שמוסיפים או מסירים הגדרת אינדקס. החיוב על רשומות האינדקס זהה לחיוב על פעולות כתיבה, כלומר יחידת כתיבה אחת לכל 1KiB.
- יצירת אינדקס חדש לאוסף שמכיל 500 מסמכים, כאשר כל רשומה באינדקס היא בגודל 1 KiB. הפעולה צורכת 500 יחידות כתיבה.
- מחיקת אינדקס קיים לאוסף שמכיל 500 מסמכים, כל רשומה באינדקס נמחקת בגודל של 1KiB. הפעולה צורכת 500 יחידות כתיבה.