מידע נוסף על אינדקסים במהדורת Enterprise של Firestore זמין במאמר סקירה כללית על אינדקסים.
לפני שמתחילים
כדי ליצור אינדקס ב-Cloud Firestore, צריך לוודא שהוקצה לכם אחד מהתפקידים הבאים:
roles/datastore.ownerroles/datastore.indexAdminroles/editorroles/owner
כדי להקצות תפקיד, ראו הקצאת תפקיד יחיד. מידע נוסף על תפקידים וההרשאות שמשויכות אליהם זמין במאמר תפקידים מוגדרים מראש.Cloud Firestore
אם הגדרתם תפקידים בהתאמה אישית, צריך להקצות את כל ההרשאות הבאות כדי ליצור אינדקסים:
datastore.indexes.createdatastore.indexes.deletedatastore.indexes.getdatastore.indexes.listdatastore.indexes.update
יצירת אינדקס
כדי ליצור אינדקס, מבצעים את השלבים הבאים:
מסוף Firebase
-
במסוף Firebase, עוברים לדף Firestore Database.
- בוחרים מסד נתונים מתוך רשימת מסדי הנתונים.
- בכרטיסייה Indexes, לוחצים על Create Index.
- מזינים מזהה אוסף.
- מוסיפים נתיב שדה אחד או יותר ובוחרים אפשרות אינדקס לכל אחד מהם.
- בוחרים באפשרות נוכחות של שדה, לא דלילה או דלילה.
- לוחצים על יצירה.
- האינדקס החדש מוצג ברשימת האינדקסים ומתחיל ליצור את האינדקס.Cloud Firestore אחרי שהאינדקס נוצר, מופיע לצידו סימן וי ירוק. אם האינדקס לא נוצר, אפשר לעיין בשגיאות בבניית אינדקס כדי לראות מהן הסיבות האפשריות לכך.
gcloud CLI
כדי ליצור אינדקס, משתמשים בפקודה gcloud firestore indexes composite create.
gcloud firestore indexes composite create \ --database='DATABASE_ID' \ --collection-group=COLLECTION \ --field-config=FIELD_CONFIGURATION \ --query-scope=collection-group \ --density=dense
מחליפים את מה שכתוב בשדות הבאים:
- DATABASE_ID: מזהה מסד נתונים.
- COLLECTION: שם האוסף.
- FIELD_CONFIGURATION: הגדרת שדה. בכל שדה,
מוסיפים
--field-config=field-path=. לדוגמה:--field-config=field-path=user-id,order=descending \ --field-config=field-path=score,order=descendingמידע נוסף על הגדרת השדות האלה זמין במאמר
--field-config.
כדי ליצור אינדקס דליל, מגדירים את --density=sparse-any.
כדי ליצור אינדקס ייחודי, מוסיפים את הדגל --unique.
Terraform
משתמשים במשאב google_firestore_index.
resource "google_firestore_index" "index" { database = "DATABASE_ID" collection = "COLLECTION" query_scope = "COLLECTION_GROUP" // You can include multiple field blocks fields { field_path = "FIELD_PATH" order = "ORDER" } // Optional multikey = true density = "DENSITY" }
מחליפים את מה שכתוב בשדות הבאים:
- DATABASE_ID: מזהה מסד הנתונים של מסד הנתונים שבחרתם
- COLLECTION: השם של האוסף שרוצים ליצור לו אינדקס
- FIELD_PATH: השם של השדה שרוצים ליצור לו אינדקס
- ORDER: אחד מהערכים
ASCENDINGאוDESCENDING - DENSITY: אחד מהערכים
SPARSE_ANYאוDENSE
מחיקת אינדקס
כדי למחוק אינדקס, פועלים לפי השלבים הבאים:
מסוף Firebase
-
במסוף Firebase, עוברים לדף Firestore Database.
- בוחרים מסד נתונים מתוך רשימת מסדי הנתונים.
- לוחצים על הכרטיסייה Indexes (אינדקסים).
- ברשימת האינדקסים, לוחצים על מחיקה בלחצן עוד של האינדקס שרוצים למחוק.
- לוחצים על מחיקת האינדקס.
gcloud CLI
כדי למצוא את שם האינדקס, משתמשים בפקודה
gcloud firestore indexes composite list.gcloud firestore indexes composite list \ --database='DATABASE_ID'
מחליפים את DATABASE_ID במזהה מסד הנתונים.
-
כדי למחוק את האינדקס, משתמשים בפקודה
gcloud firestore indexes composite delete.gcloud firestore indexes composite delete INDEX_NAME \ --database='DATABASE_ID'
מחליפים את מה שכתוב בשדות הבאים:
- INDEX_NAME: השם של אינדקס
- DATABASE_ID: מזהה מסד נתונים
זמן בניית האינדקס
כדי ליצור אינדקס, Cloud Firestore צריך ליצור את האינדקס ואז למלא את רשומות האינדקס בנתונים קיימים. הזמן שנדרש ליצירת אינדקס נקבע לפי הגורמים הבאים:
זמן הבנייה המינימלי של אינדקס הוא כמה דקות, גם אם מדובר במסד נתונים ריק.
הזמן שנדרש למילוי חוסרים של רשומות באינדקס תלוי בכמות הנתונים הקיימים שצריכים להיכלל באינדקס החדש. ככל שיש יותר ערכים בשדות שתואמים להגדרת האינדקס, כך ייקח יותר זמן למלא את רשומות האינדקס.
ניהול פעולות ממושכות
בניית אינדקסים היא פעולה ממושכת. בקטעים הבאים מוסבר איך לעבוד עם פעולות ממושכות של אינדקסים.
אחרי שמתחילים ליצור אינדקס, Cloud Firestore מקצה לפעולה שם ייחודי. לשמות הפעולות מתווספת הקידומת projects/PROJECT_ID/databases/DATABASE_ID/operations/, לדוגמה:
projects/PROJECT_ID/databases/DATABASE_ID/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 לא מוגדר בתגובה,
המשמעות היא שהפעולה לא הושלמה.