בקטע הזה מוסבר על יצירת אינדקסים במהדורת Cloud Firestore Enterprise. במהדורת Cloud Firestore Enterprise לא נוצרים אינדקסים כברירת מחדל. כדי לשפר את הביצועים של מסד הנתונים, כדאי ליצור אינדקסים לשאילתות הנפוצות ביותר.
לאינדקסים יש השפעה גדולה על הביצועים של מסד נתונים. אם קיים אינדקס לשאילתה, מסד הנתונים יכול להחזיר תוצאות ביעילות על ידי צמצום כמות הנתונים שצריך לסרוק וצמצום העבודה שנדרשת למיון התוצאות. עם זאת, רשומות אינדקס מגדילות את עלויות האחסון ואת כמות העבודה שמתבצעת במהלך פעולת כתיבה בשדות עם אינדקס.
ההבדלים בין המהדורות
בטבלה הבאה מפורטים ההבדלים העיקריים בין מהדורת Cloud Firestore Standard לבין מהדורת Cloud Firestore Enterprise.
| תכונה | מהדורת Cloud Firestore Standard | מהדורת Cloud Firestore Enterprise |
|---|---|---|
| דרישה להוספה לאינדקס | כדי להריץ שאילתות, צריך להגדיר אינדקסים. בדרך כלל השאילתות פועלות בצורה יעילה בגלל הדרישה הזו. | לא צריך אינדקסים כדי להריץ שאילתות. אפשר לבצע קריאות לא מאונדקסות, וכך להסיר מחסום ליצירת אב טיפוס. |
| הוספה אוטומטית לאינדקס | כברירת מחדל, המערכת יוצרת באופן אוטומטי אינדקסים של שדה יחיד לכל השדות במסמכים. | אין אינדקסים אוטומטיים. צריך לנהל את כל האינדקסים באופן ידני. |
| צפיפות האינדקס | כברירת מחדל, המידע דליל. מסמך בקבוצת אוספים עובר אינדוקס רק אם הוא מכיל ערך לכל שדה באינדקס. | כברירת מחדל, המאפיין לא דליל. כל המסמכים בקבוצת האוספים עוברים אינדוקס.
שדות באינדקס ללא ערך מוגדרים לערך NULL. אפשר לשנות את ההתנהגות באמצעות האפשרות sparse index. |
| סוגים ואפשרויות נתמכים של אינדקסים |
|
|
הגדרת האינדקס והמבנה שלו
אינדקס מורכב מהרכיבים הבאים:
- מזהה אוסף
- רשימה של שדות באוסף הנתון
- סדר, עולה או יורד, לכל שדה
אינדקס יכול גם להפעיל את האפשרויות sparse או unique.
סדר האינדקס
הסדר וכיוון המיון של כל שדה מגדירים באופן ייחודי את האינדקס. לדוגמה, המדדים הבאים הם שני מדדים שונים ולא ניתנים להחלפה:
| איסוף | שדות |
|---|---|
| ערים | מדינה (בסדר עולה), אוכלוסייה (בסדר יורד) |
| ערים | אוכלוסייה (בסדר יורד), מדינה (בסדר עולה), |
כשיוצרים אינדקס לתמיכה בשאילתה, צריך לכלול את השדות באותו סדר כמו בשאילתה.
צפיפות האינדקס
כברירת מחדל, רשומות האינדקס מאחסנות נתונים מכל המסמכים באוסף. זה נקרא אינדקס לא דליל. ערך באינדקס יתווסף למסמך גם אם המסמך לא מכיל אף אחד מהשדות שצוינו באינדקס. כשיוצרים רשומות אינדקס, המערכת מתייחסת לשדות שלא קיימים כאילו יש להם ערך NULL. כדי לשנות את ההתנהגות הזו, אפשר להגדיר את האינדקס כאינדקס דליל.
אינדקסים דלילים
אינדקס דליל מאנדקס רק את המסמכים באוסף שמכילים ערך (כולל null) לפחות לאחד מהשדות המאונדקסים. אינדקס דליל מפחית את עלויות האחסון ויכול לשפר את הביצועים.
אינדקסים ייחודיים
מגדירים את האפשרות 'אינדקס ייחודי' כדי לאכוף ערכים ייחודיים בשדות המאונדקסים. באינדקסים של כמה שדות, כל שילוב של ערכים חייב להיות ייחודי באינדקס. מסד הנתונים דוחה כל פעולת עדכון והוספה שמנסה ליצור רשומות אינדקס עם ערכים כפולים. אם הנתונים בשדות המאונדקסים מכילים ערכים כפולים ואתם מנסים ליצור אינדקס ייחודי, בניית האינדקס תיכשל ותוצג הודעת שגיאה בפרטי הפעולה.
שדות חסרים באינדקס ייחודי
אם מוסיפים מסמך עם שדות חסרים לאינדקס הייחודי, המערכת מגדירה ערכים חסרים לאינדקס null. רשומת האינדקס שמתקבלת חייבת להיות ייחודית, אחרת הפעולה תיכשל.
לדוגמה, עם האינדקס הזה:
| איסוף | שדות באינדקס | היקף השאילתה |
|---|---|---|
| ערים | שם (בסדר עולה) | איסוף |
אם מוסיפים את המסמך {"abbreviation": "LA"} לאוסף, האינדקס הייחודי יוצר רשומה עם name שמוגדר כ-null. אם תנסו להוסיף את המסמך {"abbreviation": "NYC"}, הפעולה תיכשל כי הרשומה שמתקבלת לאינדקס הייחודי היא זהה.
אותה התנהגות חלה על אינדקסים ייחודיים עם כמה שדות.
כשיוצרים או מעדכנים מסמך, שדות חסרים באינדקס מוגדרים ל-null, והערך שמתקבל באינדקס חייב להיות ייחודי באינדקס.
פתרון בעיות שקשורות ליצירת אינדקס
יכול להיות שתיתקלו בשגיאות בבניית האינדקסים כשאתם מנהלים את האינדקסים. פעולת יצירת אינדקס עלולה להיכשל אם יש בעיה בנתונים במסד הנתונים. פעולות הוספה לאינדקס יכולות להיכשל מהסיבות הבאות:
- הגעת למגבלת האינדקסים. לדוגמה, יכול להיות שהפעולה הגיעה למספר המקסימלי של רשומות אינדקס לכל מסמך. אם יצירת האינדקס נכשלת, תוצג הודעת שגיאה. אם לא הגעתם למגבלת ההוספות לאינדקס, נסו שוב לבצע את פעולת ההוספה לאינדקס.
- הגדרתם את האפשרות של אינדקס ייחודי, והנתונים של השדות המאונדקסים ייצרו רשומות כפולות באינדקס. כדי להמשיך, צריך להסיר מהנתונים שילובים כפולים של ערכים.