כיצד לשפר שאילתות עם MongoDB אינדקס

Kyzd Lspr S Yltwt M Mongodb Yndqs



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

צור אוסף

לפני השימוש באינדקסים, עלינו ליצור אוסף חדש ב-MongoDB שלנו. כבר יצרנו אחד והכנסנו 10 מסמכים, בשם 'דמה'. הפונקציה find() MongoDB מציגה את כל הרשומות מאוסף 'Dummy' במסך מעטפת MongoDB למטה.

test> db.Dummy.find()







בחר סוג יצירת אינדקס

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



דוגמה 01: אינדקס שדה בודד

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



test> db.Dummy.find({type: 'emp' })





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

test> db.Dummy.createIndex({ סוג: 1 })

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



test> db.Dummy.find({type: 'emp' })

דוגמה 02: אינדקס מורכב

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

נעשה שימוש באופרטור הלוגי $gte כדי להחיל את התנאי על השדה 'sal'. בסך הכל הוחזרו שני רשומות לאחר חיפוש בכל האוסף, המורכב מ-10 רשומות.

test> db.Dummy.find({type: 'emp' , סל: {$gte: 350 } })

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

test> db.Dummy.createIndex({ סוג: 1 , יהיה:- 1 })

לאחר שימוש באותה שאילתת find() לחיפוש רשומות עם ערך השדה 'type' כ-'emp' וערך השדה 'sal' גדול משווה ל-350, השגנו את אותו פלט עם שינוי קל בסדר בהשוואה לתוצאת השאילתה הקודמת. רשומת הערך הגדול יותר עבור שדה 'סאל' נמצאת כעת במקום הראשון, בעוד שהקטנה ביותר היא הנמוכה ביותר לפי ה-'-1' שנקבע עבור שדה ה'סאל' במדד המורכב לעיל.

test> db.Dummy.find({type: 'emp' , סל: {$gte: 350 } })

דוגמה 03: אינדקס טקסט

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

test> db.Test.insertMany([

{שֵׁם: 'אנה' , של ה: 'היא גרה בלונדון והיא מורה טובה' },

{שֵׁם: 'רוברט' , של ה: 'הוא שחקן כדורגל כל כך מדהים' },

{שֵׁם: 'מ' , של ה: 'אולי מטייל בדובאי' },

{שֵׁם: 'יעקב' , של ה: 'הוא מעורר מחשבה ועשיר.' },

{שֵׁם: 'סיליאן' , של ה: 'התחלה של סרט פשוט זכתה לתהילה תוך שניות' },

{שֵׁם: 'קן' , של ה: 'חובב אוכל. היא יכולה לאכול אותך גם.' }

])

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

test> db.Test.createIndex({ des: 'טֶקסט' })

כעת, הפונקציה find() שימשה לביצוע 'חיפוש טקסט' באוסף באמצעות אינדקס 'des_text'. האופרטור $search שימש כדי לחפש את המילה 'אוכל' ברשומות האוסף ולהציג את הרשומה הספציפית הזו.

test> db.Test.find({ $text: { $search: 'מזון' }});

אמת אינדקסים:

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

test> db.Test.getIndex()

test> db.Dummy.getIndex()

זרוק אינדקסים:

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

test> db.Dummy.dropIndex({type: 1 })

באותו אופן, ניתן להוריד את המדד המורכב.

test> db.Dummy.drop index({type: 1 , יהיה: 1 })

סיכום

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