נהל אינדקסים ב-Cloud Firestore

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

צור אינדקס חסר באמצעות הודעת שגיאה

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

עקוב אחר הקישור שנוצר למסוף Firebase, סקור את המידע המאוכלס אוטומטית ולחץ על צור .

תפקידים והרשאות

לפני שתוכל ליצור אינדקס ב-Cloud Firestore, ודא שהוקצו לך אחד מהתפקידים הבאים:

  • roles/datastore.owner
  • roles/datastore.indexAdmin
  • roles/editor
  • roles/owner

אם הגדרתם תפקידים מותאמים אישית, הקצה את כל ההרשאות הבאות ליצירת אינדקסים:

  • datastore.indexes.create
  • datastore.indexes.delete
  • datastore.indexes.get
  • datastore.indexes.list
  • datastore.indexes.update

השתמש במסוף Firebase

כדי ליצור אינדקס חדש באופן ידני ממסוף Firebase:

תמונה של ממשק האינדקס של Firestore במסוף Firebase

  1. עבור לקטע Cloud Firestore של קונסולת Firebase .
  2. עבור אל הכרטיסייה אינדקסים ולחץ על הוסף אינדקס .
  3. הזינו את שם האוסף והגדרו את השדות לפיהם תרצו לסדר את האינדקס.
  4. לחץ על צור .

שדות אינדקס חייבים להתאים לאילוצים על נתיבי שדות .

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

הסר אינדקסים

כדי למחוק אינדקס:

  1. עבור לקטע Cloud Firestore של קונסולת Firebase .
  2. לחץ על הכרטיסייה אינדקסים .
  3. העבר את העכבר מעל האינדקס שברצונך למחוק ובחר מחק מתפריט ההקשר.
  4. אשר שברצונך למחוק אותו על ידי לחיצה על מחק מההתראה.

השתמש ב-Firebase CLI

אתה יכול גם לפרוס אינדקסים עם Firebase CLI . כדי להתחיל, הפעל את firebase init firestore בספריית הפרויקט שלך. במהלך ההגדרה, ה-CLI של Firebase יוצר קובץ JSON עם אינדקסי ברירת המחדל בפורמט הנכון. ערוך את הקובץ כדי להוסיף עוד אינדקסים ופרוס אותו עם פקודת firebase deploy .

כדי לפרוס אינדקסים וכללים של Cloud Firestore בלבד, הוסף את הדגל --only firestore .

אם אתה מבצע עריכות באינדקסים באמצעות מסוף Firebase, הקפד לעדכן גם את קובץ האינדקסים המקומיים שלך. עיין בהפניה להגדרת אינדקס JSON .

זמן בניית אינדקס

כדי לבנות אינדקס, Cloud Firestore חייבת להגדיר את האינדקס ולאחר מכן למלא מחדש את האינדקס בנתונים קיימים. זמן בניית אינדקס הוא הסכום של זמן ההגדרה וזמן המילוי החוזר:

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

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

בניית אינדקס הן פעולות ארוכות טווח .

לאחר שתתחיל בניית אינדקס, Cloud Firestore מקצה לפעולה שם ייחודי. שמות הפעולות מקבלים קידומת projects/[PROJECT_ID]/databases/(default)/operations/ , לדוגמה:

projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

עם זאת, אתה יכול להשאיר את הקידומת כאשר אתה מציין שם פעולה עבור הפקודה describe .

פירוט כל הפעולות ארוכות הטווח

כדי לרשום פעולות ארוכות טווח, השתמש בפקודה gcloud firestore operations list . פקודה זו מפרטת פעולות מתמשכות והושלמו לאחרונה. הפעולות רשומות למספר ימים לאחר השלמתם:

gcloud firestore operations list

בדוק את מצב הפעולה

במקום לרשום את כל הפעולות ארוכות הטווח, אתה יכול לרשום את הפרטים של פעולה בודדת:

gcloud firestore operations describe operation-name

הערכת זמן ההשלמה

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

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

חלק workCompleted לפי workEstimated להערכת התקדמות גסה. ההערכה עשויה להיות לא מדויקת מכיוון שהיא תלויה באיסוף נתונים סטטיסטיים מאוחרים.

לדוגמה, הנה סטטוס ההתקדמות של בניית אינדקס:

{
  "operations": [
    {
      "name": "projects/project-id/operations/AyAyMDBiM2U5NTgwZDAtZGIyYi0zYjc0LTIzYWEtZjg1ZGdWFmZWQHEjF0c2Flc3UtcmV4ZWRuaS1uaW1kYRUKSBI",
      "metadata": {
        "@type": "type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata",
        "common": {
          "operationType": "CREATE_INDEX",
          "startTime": "2020-06-23T16:52:25.697539Z",
          "state": "PROCESSING"
        },
        "progressDocuments": {
          "workCompleted": "219327",
          "workEstimated": "2198182"
        }
       },
    },
    ...

כאשר מתבצעת פעולה, תיאור הפעולה יכיל "done": true . ראה את הערך של שדה state עבור תוצאת הפעולה. אם השדה done ' לא מוגדר בתגובה, הערך שלו הוא false . אין לסמוך על קיומו של ערך done עבור פעולות מתקדמות.

שגיאות בניית אינדקס

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

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