ניהול אינדקסים במהדורת Enterprise
התנהגות האינדוקס תלויה במהדורה של מסד הנתונים. בדף הזה מוסבר איך לנהל את האינדקסים שלכם ב-Firestore Enterprise edition. למידע על מהדורת Standard של Firestore, אפשר לעיין במאמר סקירה כללית על אינדקסים במהדורת Standard של Firestore.
מידע נוסף על אינדקסים במהדורת Enterprise של Firestore זמין במאמר סקירה כללית על אינדקסים.
לפני שמתחילים
לפני שיוצרים אינדקס ב-Firestore, צריך לוודא שהוקצה לכם אחד מהתפקידים הבאים:
roles/datastore.ownerroles/datastore.indexAdminroles/editorroles/owner
הוראות להקצאת תפקיד מופיעות במאמר הקצאת תפקיד יחיד. מידע נוסף על תפקידים ב-Firestore וההרשאות שמשויכות אליהם זמין במאמר תפקידים מוגדרים מראש.
אם הגדרתם תפקידים בהתאמה אישית, צריך להקצות את כל ההרשאות הבאות כדי ליצור אינדקסים:
datastore.indexes.createdatastore.indexes.deletedatastore.indexes.getdatastore.indexes.listdatastore.indexes.update
יצירת אינדקס
כדי ליצור אינדקס, מבצעים את השלבים הבאים:
מסוףGoogle Cloud
-
נכנסים לדף Databases במסוף Google Cloud .
- בוחרים מסד נתונים מתוך רשימת מסדי הנתונים.
- בתפריט הניווט, לוחצים על Indexes (אינדקסים).
- לוחצים על יצירת אינדקס.
- מזינים מזהה אוסף.
- מוסיפים נתיב שדה אחד או יותר ובוחרים אפשרות אינדקס לכל אחד מהם.
- בוחרים באפשרות של נוכחות שדה, לא דלילה או דלילה.
- אפשר גם להגדיר את האפשרות unique index.
- לוחצים על יצירה.
- האינדקס החדש מוצג ברשימת האינדקסים, ו-Firestore מתחיל ליצור את האינדקס. כשהאינדקס נוצר, מופיע סימן וי ירוק לצד האינדקס. אם האינדקס לא נוצר, כדאי לעיין במאמר בנושא שגיאות בבניית אינדקסים כדי לראות מה יכולות להיות הסיבות לכך.
CLI של gcloud
כדי ליצור אינדקס, משתמשים בפקודה 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
יצירת אינדקס טקסט
משתמשים במסוף Google Cloud כדי ליצור אינדקס טקסט.
בGoogle Cloud מסוף, עוברים לדף Databases.
בוחרים מסד נתונים מתוך רשימת מסדי הנתונים.
בתפריט הניווט, לוחצים על Indexes (אינדקסים).
אופציונלי: מזינים שם לאינדקס.
עוברים אל סוג החיפוש ובוחרים באפשרות טקסט.
מזינים מזהה אוסף.
מגדירים שדה אחד או יותר לאינדקס.
מגדירים את היקף השאילתה לאינדקס.
בוחרים שפת ברירת מחדל.
אופציונלי: מגדירים נתיב לשינוי שפה לשם שדה שמכיל את הגדרת השפה של המסמך.
לוחצים על יצירה.
האינדקס החדש מוצג ברשימת האינדקסים, ו-Firestore מתחיל ליצור את האינדקס. כשהאינדקס נוצר, מופיע סימן וי ירוק לצד האינדקס.
יצירת אינדקס גיאו-מרחבי
משתמשים במסוף Google Cloud כדי ליצור אינדקס גיאו-מרחבי.
בGoogle Cloud מסוף, עוברים לדף Databases.
בוחרים מסד נתונים מתוך רשימת מסדי הנתונים.
בתפריט הניווט, לוחצים על Indexes (אינדקסים).
אופציונלי: מזינים שם לאינדקס.
עוברים אל סוג החיפוש ובוחרים באפשרות גיאוגרפי (2dsphere).
מזינים מזהה אוסף.
מגדירים שדה אחד או יותר לאינדקס.
מגדירים את היקף השאילתה לאינדקס.
לוחצים על יצירה.
האינדקס החדש מוצג ברשימת האינדקסים, ו-Firestore מתחיל ליצור את האינדקס. כשהאינדקס נוצר, מופיע סימן וי ירוק לצד האינדקס.
מחיקת אינדקס
כדי למחוק אינדקס, פועלים לפי השלבים הבאים:
מסוףGoogle Cloud
-
נכנסים לדף Databases במסוף Google Cloud .
- בוחרים מסד נתונים מתוך רשימת מסדי הנתונים.
- בתפריט הניווט, לוחצים על Indexes (אינדקסים).
- ברשימת האינדקסים, לוחצים על הלחצן עוד לצד האינדקס שרוצים למחוק ובוחרים באפשרות מחיקה.
- לוחצים על מחיקת האינדקס.
CLI של gcloud
כדי למצוא את שם האינדקס, משתמשים בפקודה
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: מזהה מסד נתונים
זמן בניית האינדקס
כדי ליצור אינדקס, Firestore צריך ליצור את האינדקס ואז למלא מחדש את רשומות האינדקס עם נתונים קיימים. הזמן שנדרש ליצירת אינדקס נקבע לפי הגורמים הבאים:
משך זמן של תהליך build מינימלי של אינדקס הוא כמה דקות, גם אם מדובר במסד נתונים ריק.
הזמן שנדרש למילוי חוסרים של רשומות באינדקס תלוי בכמות הנתונים הקיימים שצריכים להיכלל באינדקס החדש. ככל שיש יותר ערכי שדות שתואמים להגדרת האינדקס, כך יידרש יותר זמן למילוי חוזר של רשומות האינדקס.
ניהול פעולות ממושכות
יצירת אינדקסים היא פעולה ממושכת. בקטעים הבאים מוסבר איך לעבוד עם פעולות ממושכות של אינדקסים.
אחרי שמתחילים ליצור אינדקס, 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 לא מוגדר בתגובה,
המשמעות היא שהפעולה לא הושלמה.