בדף הזה מפורטות דוגמאות לחישוב יחידות החיוב בכמה מהתרחישים הנפוצים ביותר. חשוב לזכור שכל שאילתה עשויה להיות שונה בנתונים שעובדו, על סמך גורמים כמו התוכנית לביצוע השאילתה, צורת הנתונים והאינדקסים הזמינים.
מומלץ להשתמש בתכונה 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" כוללת ביטוי (
"dry water") ומונחים נוספים. חיפושים של ביטויים הם מורכבים יותר, כי מנוע השאילתות צריך לבדוק את הקרבה והסדר של הטוקנים, ולכן שלב החיפוש צורך 7 יחידות קריאה. מכיוון שמעט מאוד מסמכים תואמים, עלות אחזור המסמכים נמוכה. - השאילתה "indoor" "citrus" "tree" מחפשת שלושה מונחים נפרדים. למרות שהיא קצת פחות מורכבת לכל מונח מאשר חיפוש ביטוי, היא עדיין דורשת חיפוש של כמה אסימונים. עלות הסריקה של אינדקס החיפוש נמוכה מעט יותר (6 יחידות קריאה) מאשר בדוגמה "dry water", אבל מוחזרים 36 מסמכים, מה שמגדיל את העלות הכוללת.
- השאילתה balcony planter היא בעלת העלות הגבוהה ביותר של חיפוש טקסט מלא, 25 יחידות, בפער משמעותי. הסיבה העיקרית לכך היא שהשאילתה מבקשת למיין את התוצאות לפי רלוונטיות (
.sort({score: {$meta: "textScore"}})) במונחים שתואמים למסמכים רבים. כדי לקבוע מהן 50 התוצאות הכי רלוונטיות, מנוע השאילתות צריך למצוא את כל ההתאמות הפוטנציאליות ל "מרפסת" או ל"אדנית", לחשב את ציון הרלוונטיות של כל אחת מהן ואז למיין אותן. תהליך הדירוג והמיון הזה של מספר גדול של מועמדים באינדקס דורש משאבי מחשוב רבים, למרות שבסופו של דבר מאוחזרים רק 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. צריכה: יחידת קריאה אחת
- קריאה נקודתית של מסמך אחד בגודל 1MiB. צריכה: 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:
- הסבר על שאילתה שמריץ את השאילתה: חלה עלות על השאילתה.
- הסבר על שאילתות באמצעות האפשרות "תוכנית בלבד". צריכה: יחידת קריאה אחת (העלות המינימלית של שאילתה)
פעולות כתיבה
פעולות כתיבה (יצירה, עדכון ומחיקה) מחויבות על סמך הגודל של המסמכים והאינדקסים שנוצרים, משתנים או נמחקים במהלך הפעולה. פעולות כתיבה צורכות יחידות כתיבה. יחידות הכתיבה מחושבות במנות של 1KiB.
פעולות כתיבה פשוטות, כמו עדכון לפי מזהה מסמך, כרוכות רק בעלות של פעולות הכתיבה. בפעולות כתיבה שדורשות שאילתה כדי להשלים את הפעולה, יתווספו גם עלויות הקריאה שמשויכות לשאילתה.
ריכזנו כאן כמה דוגמאות.
יוצרת
- יוצרים מסמך חדש בגודל 10KiB ללא אינדקסים. צריכה: 10 יחידות כתיבה
- יוצרים מסמך בגודל 1KiB עם רשומת אינדקס אחת בגודל 256 בייטים באוסף. צורך: 2 יחידות כתיבה
עדכונים
- חיפוש מסמך בגודל 10KiB לפי מזהה מסמך ועדכון ללא אינדקסים באוסף. צריכה: 10 יחידות כתיבה
- חיפוש מסמך בגודל 1KiB לפי מזהה המסמך ועדכון שדה אחד עם רשומת אינדקס אחת בגודל 256 בייטים. צריכה: 3 יחידות כתיבה. הערה: עדכון של רשומת אינדקס במצב כזה צורך 2 יחידות כתיבה – אחת למחיקה ואחת ליצירה מחדש של רשומת האינדקס.
- חיפוש מסמך בגודל 1KiB לפי מזהה המסמך, בלי לעדכן שום דבר (ללא שינויים). צורך: יחידת כתיבה אחת (עלויות הכתיבה המינימליות)
- שאילתה על כל המסמכים בגודל 1KiB באוסף, שסורקת 1,000 מסמכים, והוספת שדה חדש בגודל 256 בייטים ללא אינדקסים באוסף: 1,000 יחידות קריאה ו-1,000 יחידות כתיבה.
מחיקות
- מחיקת מסמך בגודל 1KiB, שיש לו אינדקס אחד באוסף. צריכה: 2 יחידות כתיבה
- מחיקת מסמך בגודל 1KiB, שאין לו אינדקסים באוסף. צריכה: יחידת כתיבה אחת
יצירת אינדקסים
החיוב על יצירת אינדקסים הוא על רשומות האינדקס שנוצרו או שונו במהלך פעולת היצירה. העלויות האלה נצברות בכל פעם שמוסיפים או מסירים הגדרת אינדקס. החיוב על רשומות האינדקס זהה לחיוב על כתיבות, ועל כל 1KiB מחויבת יחידת כתיבה אחת.
- יצירת אינדקס חדש לאוסף שמכיל 500 מסמכים, כל רשומה באינדקס היא בגודל 1KiB. צורך 500 יחידות כתיבה.
- מחיקת אינדקס קיים של אוסף שמכיל 500 מסמכים, כל רשומת אינדקס שנמחקת היא בגודל 1KiB. צורך 500 יחידות כתיבה.