ניהול אינדקסים במהדורת 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.
- לוחצים על יצירת אינדקס.
- מזינים מזהה אוסף.
- מוסיפים נתיב שדה אחד או יותר ובוחרים אפשרות אינדקס לכל אחד מהם.
- בוחרים אפשרות נוכחות של שדה: לא דליל או דליל.
- אפשר גם להגדיר את האפשרות אינדקס ייחודי.
- לוחצים על יצירה.
- האינדקס החדש מוצג ברשימת האינדקסים, ו-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 מתחיל ליצור את האינדקס. אחרי שהאינדקס נוצר, מופיע סימן וי ירוק לידו.
CLI של gcloud
כדי ליצור אינדקס טקסט, משתמשים בפקודה gcloud firestore indexes composite create:
gcloud firestore indexes composite create \ --database='DATABASE_ID' \ --collection-group=COLLECTION_GROUP \ --field-config=field-path=FIELD_NAME,search-config='{"text-spec": {"index-specs": [{"index-type": "tokenized", "match-type": "match-globally"}]}}' \ --search-index-options=text-language=en \ --async
מחליפים את מה שכתוב בשדות הבאים:
- DATABASE_ID: מזהה מסד נתונים.
- COLLECTION_GROUP: המזהה של האוסף שרוצים ליצור לו אינדקס.
- FIELD_NAME: השם של השדה שרוצים ליצור לו אינדקס.
הדגל --async מריץ את פעולת יצירת האינדקס ברקע.
יצירת אינדקס גיאו-מרחבי
כדי ליצור אינדקס גיאו-מרחבי:
מסוףGoogle Cloud
-
בGoogle Cloud מסוף, עוברים לדף Databases.
- בוחרים מסד נתונים מתוך רשימת מסדי הנתונים.
- בתפריט הניווט, לוחצים על Indexes.
- אופציונלי: מזינים שם לאינדקס.
- עוברים אל סוג החיפוש ובוחרים באפשרות גיאוגרפי (2dsphere).
- מזינים מזהה אוסף.
- מגדירים שדה אחד או יותר לאינדקס.
- הגדרת היקף השאילתה לאינדקס.
- לוחצים על יצירה.
האינדקס החדש מוצג ברשימת האינדקסים, ו-Firestore מתחיל ליצור את האינדקס. אחרי שהאינדקס נוצר, מופיע סימן וי ירוק לידו.
CLI של gcloud
כדי ליצור אינדקס גיאוגרפי, משתמשים בפקודה gcloud firestore indexes composite create:
gcloud firestore indexes composite create \
--database='DATABASE_ID' \
--collection-group=COLLECTION_GROUP \
--field-config=field-path=FIELD_NAME,search-config='{"geo-spec": {}}' \
--asyncמחליפים את מה שכתוב בשדות הבאים:
- DATABASE_ID: מזהה מסד נתונים.
- COLLECTION_GROUP: המזהה של האוסף שרוצים ליצור לו אינדקס.
- FIELD_NAME: השם של השדה שרוצים ליצור לו אינדקס.
הדגל --async מריץ את פעולת יצירת האינדקס ברקע.
מחיקת אינדקס
כדי למחוק אינדקס, פועלים לפי השלבים הבאים:
מסוף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 לא מוגדר בתגובה, סימן שהפעולה לא הושלמה.