דוגמאות לתמחור

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

מומלץ להשתמש בתכונה Query Explain כדי להבין טוב יותר את העלות והביצועים של השאילתות הספציפיות שלכם.

פעולות קריאה

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

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

בטבלה הבאה מפורטים החיובים שקשורים להפעלת שאילתות חיפוש בטקסט מלא בקטלוג מוצרים של חנות אונליין למכירת צמחים. בדוגמה הזו אנחנו מניחים שיש אוסף של 200,000 כרטיסי מוצר, שכל מסמך של כרטיס מוצר הוא בגודל 2KiB, וגודל אינדקס החיפוש המתאים הוא בערך 100MiB.

שאילתה קוד לדוגמה יחידות קריאה משוערות שנצרכו לכל שאילתה עלויות משוערות (אזור: us-central1 בדולר ארה"ב)
חיפוש של מוצר נדיר של מגש שטוח עם ערימה של "מים יבשים", שמביא לאחזור של 3 מסמכים.
db.products.find(
  {$text: {$search: '"dry water" stack flat'}}
);

10 יחידות קריאה בסך הכול

על סמך 7 יחידות לחיפוש טקסט מלא ו-3 יחידות נוספות למסמכים שהוחזרו.

‫$0.50 למיליון שאילתות
חיפוש של כל עצי ההדר לגידול בתוך הבית, שמחזיר 36 מסמכים.
db.products.find(
  {$text: {$search: '"indoor" "citrus" "tree"'}}
);

‫42 יחידות קריאה בסך הכול

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

‫2.10$ למיליון שאילתות
מחפשים עציצים למרפסת, ויש הרבה מוצרים תואמים. מיון תוצאות לפי רלוונטיות והגבלה ל-50 תוצאות החיפוש הראשונות.
db.products.find(
  {$text: {$search: 'balcony planter'}}
).sort({score: {$meta: "textScore"}}).limit(50);

‫75 יחידות קריאה בסך הכול

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

‫3.75$ למיליון שאילתות

הדוגמאות האלה ממחישות איך דפוסי שאילתות שונים משפיעים על העלויות:

  • השאילתה"dry water" כוללת ביטוי ("dry water") ומונחים נוספים. חיפושים של ביטויים מורכבים יותר, כי מנוע השאילתות צריך לבדוק את הקרבה והסדר של הטוקנים, ולכן הם תורמים ל-7 יחידות הקריאה בשלב החיפוש. מכיוון שיש מעט מאוד מסמכים שתואמים, העלות של אחזור המסמכים נמוכה.
  • שאילתת החיפוש "עץ" "הדרים" "בתוך הבית" מחפשת שלושה מונחים נפרדים. החיפוש הזה קצת פחות מורכב מחיפוש של ביטוי, אבל עדיין צריך לחפש כמה טוקנים. עלות הסריקה של אינדקס החיפוש נמוכה מעט – 6 יחידות קריאה – בהשוואה לדוגמה של 'מים יבשים', אבל המערכת מחזירה 36 מסמכים, ולכן העלות הכוללת גבוהה יותר.
  • העלות של שאילתת החיפוש 'עציץ למרפסת' היא הגבוהה ביותר מבין כל שאילתות החיפוש בטקסט מלא, והיא עומדת על 25 יחידות, בהפרש משמעותי. הסיבה העיקרית לכך היא שההנחיה מבקשת למיין את התוצאות לפי רלוונטיות (.sort({score: {$meta: "textScore"}}) ) למונחים שתואמים להרבה מסמכים. כדי לקבוע מהן 50 התוצאות הכי רלוונטיות, מנוע השאילתות צריך למצוא את כל ההתאמות האפשריות למונחים balcony או planter, לחשב ציון רלוונטיות לכל אחת מהן ואז למיין אותן. תהליך הניקוד והמיון הזה של מספר גדול של מועמדים באינדקס דורש הרבה משאבי מחשוב, גם אם בסופו של דבר מאוחזרים רק 50 מסמכים. הרוחב של המונחים בשילוב עם התקורה של ניקוד הרלוונטיות מייקרים את שלב החיפוש.

שאילתות גיאוגרפיות

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

בטבלה הבאה מפורטות העלויות שקשורות להרצת שאילתות גיאו-מרחביות באפליקציית מפות. בדוגמה הזו מניחים שיש אוסף של 1,000,000 מסמכים שמייצגים נקודות עניין, שכל מסמך של נקודת עניין הוא בגודל 1KiB, וגודל האינדקס הגיאו-מרחבי התואם הוא בערך 60MiB.

שאילתה קוד לדוגמה יחידות קריאה משוערות שנצרכו לכל שאילתה עלויות משוערות (אזור: us-central1 בדולר ארה"ב)
תמצא את כל נקודות העניין במרחק של עד 10 ק"מ, ותחזיר 10 התאמות.
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 10000
    }}})

16 יחידות קריאה בסך הכול.

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

‫$0.80 למיליון שאילתות
תמצא את כל המקומות שמעניינים אותי במרחק של עד 100 ק"מ, ותחזיר את 10 המקומות הכי קרובים מתוך 1,000 תוצאות
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 100000
    }}}).limit(10)

‫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 שמריץ את השאילתה: חלה עלות על השאילתה.
  • הסבר על שאילתה באמצעות האפשרות 'תוכנית בלבד'. צריכה: יחידת קריאה אחת (העלות המינימלית של שאילתה)

פעולות כתיבה

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

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

בהמשך מפורטות דוגמאות.

יצירה

  • יוצרים מסמך חדש בגודל 10KiB ללא אינדקסים. צריכה: 10 יחידות כתיבה
  • ליצור מסמך בגודל 1KiB עם רשומה אחת של אינדקס בגודל 256 בייט באוסף. צריכה: 2 יחידות כתיבה

עדכונים

  • חיפוש מסמך בגודל 10KiB לפי מזהה המסמך ועדכון שלו ללא אינדקסים באוסף. צריכה: 10 יחידות כתיבה
  • חיפוש מסמך בגודל 1KiB לפי מזהה המסמך ועדכון שדה אחד עם רשומה אחת באינדקס בגודל 256 בייט. צריכה: 3 יחידות כתיבה. הערה: עדכון של רשומה באינדקס במצב הזה צורך 2 יחידות כתיבה – אחת למחיקה ואחת ליצירה מחדש של הרשומה באינדקס.
  • חיפוש מסמך בגודל 1KiB לפי מזהה המסמך ועדכון שלו בלי לבצע שינויים. השימוש: יחידת כתיבה אחת (העלות המינימלית של כתיבה)
  • שאילתה לכל המסמכים בגודל 1KiB באוסף, שסורקת 1,000 מסמכים, והוספה של שדה חדש בגודל 256 בייט ללא אינדקסים באוסף: 1,000 יחידות קריאה ו-1,000 יחידות כתיבה.

מוחק

  • מחיקת מסמך בגודל 1KiB, שיש לו אינדקס אחד באוסף. צריכה: 2 יחידות כתיבה
  • מחיקה של מסמך בגודל 1KiB, שלא כולל אינדקסים באוסף. צריכה: יחידת כתיבה אחת

גרסאות build של אינדקסים

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

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