Indexe verwalten
Auf dieser Seite wird beschrieben, wie Sie Ihre Indexe verwalten. Weitere Informationen zu Indexen finden Sie unter Indexe – Übersicht.
Hinweise
Bevor Sie einen Index in Firestore mit MongoDB-Kompatibilität erstellen können, muss Ihnen eine der folgenden Rollen zugewiesen sein:
roles/datastore.owner
roles/datastore.indexAdmin
roles/editor
roles/owner
Informationen zum Zuweisen einer Rolle finden Sie unter Einzelne Rolle zuweisen. Weitere Informationen zu Firestore-Rollen und den zugehörigen Berechtigungen finden Sie unter Vordefinierte Rollen.
Wenn Sie benutzerdefinierte Rollen definiert haben, weisen Sie alle folgenden Berechtigungen zum Erstellen von Indexen zu:
datastore.indexes.create
datastore.indexes.delete
datastore.indexes.get
datastore.indexes.list
datastore.indexes.update
Index erstellen
So erstellen Sie einen Index:
Google Cloud console
-
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
- Wählen Sie eine Datenbank aus der Liste der Datenbanken aus.
- Klicken Sie im Navigationsmenü auf Indizes.
- Klicken Sie auf Index erstellen.
- Geben Sie eine Sammlungs-ID ein.
- Fügen Sie einen oder mehrere Feldpfade hinzu und wählen Sie für jeden eine Indexierungsoption aus.
- Wählen Sie eine Option für die Feldpräsenz aus, entweder „nicht spärlich“ oder „spärlich“.
- Legen Sie optional die Option Index mit mehreren Schlüsseln fest.
- Klicken Sie auf Erstellen.
- Ihr neuer Index wird in der Liste der Indexe angezeigt und Firestore mit MongoDB-Kompatibilität beginnt mit dem Erstellen des Index. Wenn der Index erstellt wurde, wird neben dem Index ein grünes Häkchen angezeigt. Wenn der Index nicht erstellt wird, finden Sie unter Fehler bei der Indexerstellung mögliche Ursachen.
gcloud-CLI
Verwenden Sie zum Erstellen eines Index den Befehl gcloud firestore indexes composite create
. Legen Sie api-scope
auf mongodb-compatible-api
fest.
gcloud firestore indexes composite create \ --database='DATABASE_ID' \ --collection-group=COLLECTION \ --field-config=FIELD_CONFIGURATION \ --query-scope=collection-group \ --density=dense \ --api-scope=mongodb-compatible-api
Ersetzen Sie Folgendes:
- DATABASE_ID: eine Datenbank-ID.
- COLLECTION: ein Sammlungsname.
- FIELD_CONFIGURATION: eine Feldkonfiguration. Fügen Sie für jedes Feld
--field-config=field-path=
hinzu. Beispiel:--field-config=field-path=user-id,order=descending \ --field-config=field-path=score,order=descending
Weitere Informationen zum Konfigurieren dieser Felder finden Sie unter
--field-config
.
Wenn Sie einen spärlichen Index erstellen möchten, legen Sie --density=sparse-any
fest.
Wenn Sie einen Index mit mehreren Schlüsseln erstellen möchten, fügen Sie das Flag --multikey
hinzu.
Terraform
Verwenden Sie die Ressource google_firestore_index
und legen Sie api_scope
auf MONGODB_COMPATIBLE_API
und query_scope
auf COLLECTION_GROUP
fest.
resource "google_firestore_index" "index" { database = "DATABASE_ID" collection = "COLLECTION" api_scope = "MONGODB_COMPATIBLE_API" query_scope = "COLLECTION_GROUP" // You can include multiple field blocks fields { field_path = "FIELD_PATH" order = "ORDER" } // Optional multikey = true density = "DENSITY" }
Ersetzen Sie Folgendes:
- DATABASE_ID: Die Datenbank-ID für die ausgewählte Datenbank
- COLLECTION: Der Name der zu indexierenden Sammlung
- FIELD_PATH: Der Name des zu indexierenden Felds
- ORDER: Entweder
ASCENDING
oderDESCENDING
- DENSITY: Entweder
SPARSE_ANY
oderDENSE
Index löschen
So löschen Sie einen Index:
Google Cloud console
-
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
- Wählen Sie eine Datenbank aus der Liste der Datenbanken aus.
- Klicken Sie im Navigationsmenü auf Indizes.
- Wählen Sie in der Liste der Indexe für den Index, den Sie löschen möchten, über die Schaltfläche Mehr die Option Löschen aus.
- Klicken Sie auf Index löschen.
gcloud-CLI
Verwenden Sie den Befehl
gcloud firestore indexes composite list
, um den Namen des Index zu ermitteln.gcloud firestore indexes composite list \ --database='DATABASE_ID'
Ersetzen Sie DATABASE_ID durch die Datenbank-ID.
-
Verwenden Sie den Befehl
gcloud firestore indexes composite delete
, um den Index zu löschen.gcloud firestore indexes composite delete INDEX_NAME \ --database='DATABASE_ID'
Ersetzen Sie Folgendes:
- INDEX_NAME: der Name eines Index
- DATABASE_ID: eine Datenbank-ID
Indexerstellungszeit
Zum Erstellen eines Indexes muss Firestore mit MongoDB-Kompatibilität den Index erstellen und die Indexeinträge dann mit vorhandenen Daten füllen. Die Zeit, die zum Erstellen eines Index benötigt wird, hängt von Folgendem ab:
Die Mindesterstellungszeit für einen Index beträgt einige Minuten, auch bei einer leeren Datenbank.
Die Dauer des Backfill von Indexeinträgen hängt davon ab, wie viele vorhandene Daten in den neuen Index gehören. Je mehr Feldwerte mit der Indexdefinition übereinstimmen, desto länger dauert es, bis die Indexeinträge befüllt sind.
Vorgänge mit langer Ausführungszeit verwalten
Index-Builds sind Vorgänge mit langer Ausführungszeit. In den folgenden Abschnitten wird beschrieben, wie Sie mit lang laufenden Vorgängen für Indexe arbeiten.
Nachdem Sie mit dem Erstellen eines Index begonnen haben, weist Firestore mit MongoDB-Kompatibilität dem Vorgang einen eindeutigen Namen zu. Vorgangsnamen haben das Präfix projects/PROJECT_ID/databases/DATABASE_ID/operations/
, zum Beispiel:
projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Wenn Sie für den Befehl describe
einen Vorgangsnamen angeben, können Sie das Präfix weglassen.
Alle lang andauernden Vorgänge auflisten
Verwenden Sie zum Auflisten von Vorgängen mit langer Ausführungszeit den Befehl gcloud firestore operations list
. Dieser Befehl listet laufende und kürzlich abgeschlossene Vorgänge auf.
Die Vorgänge sind nach Abschluss einige Tage lang in der Liste enthalten:
gcloud firestore operations list
Vorgangsstatus prüfen
Anstelle aller Vorgänge mit langer Ausführungszeit können Sie auch die Details eines einzelnen Vorgangs auflisten:
gcloud firestore operations describe operation-name
Fertigstellungszeit schätzen
Während der Ausführung eines Vorgangs wird im Feld state
der Gesamtstatus des Vorgangs angezeigt.
Eine Anfrage für den Status eines Vorgangs mit langer Ausführungszeit gibt auch die Messwerte workEstimated
und workCompleted
zurück. workEstimated
gibt die geschätzte Gesamtzahl der Dokumente an, die ein Vorgang verarbeitet. workCompleted
gibt die Anzahl der bisher verarbeiteten Dokumente an. Nach Abschluss des Vorgangs gibt workCompleted
die Gesamtzahl der tatsächlich verarbeiteten Dokumente wieder, die sich vom Wert von workEstimated
unterscheiden können.
Um den Fortschritt eines Vorgangs zu schätzen, teilen Sie workCompleted
durch workEstimated
.
Hier sehen Sie ein Beispiel für den Fortschritt beim Erstellen eines Index:
{ "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" } }, }, ...
Wenn ein Vorgang abgeschlossen ist, enthält die Vorgangsbeschreibung "done": true
. Der Wert des Feldes state
stellt das Ergebnis des Vorgangs dar. Wenn das Feld done
nicht in der Antwort festgelegt ist, wurde der Vorgang nicht abgeschlossen.