Cloud Firestore stellt die Abfrageleistung sicher, indem für jede Abfrage ein Index erforderlich ist. Die für die einfachsten Abfragen erforderlichen Indizes werden automatisch für Sie erstellt . Während Sie Ihre App verwenden und testen, generiert Cloud Firestore Fehlermeldungen, die Ihnen helfen, zusätzliche Indizes zu erstellen, die Ihre App benötigt. Auf dieser Seite wird beschrieben, wie Sie Ihre Einzelfeld- und zusammengesetzten Indizes verwalten.
Erstellen Sie einen fehlenden Index durch eine Fehlermeldung
Wenn Sie versuchen, eine zusammengesetzte Abfrage mit einer Bereichsklausel durchzuführen, die keinem vorhandenen Index zugeordnet ist, erhalten Sie eine Fehlermeldung. Die Fehlermeldung enthält einen direkten Link zum Erstellen des fehlenden Index in der Firebase-Konsole.
Folgen Sie dem generierten Link zur Firebase-Konsole, überprüfen Sie die automatisch eingetragenen Informationen und klicken Sie auf Erstellen .
Verwenden Sie die Firebase-Konsole
So erstellen Sie manuell einen neuen Index über die Firebase-Konsole:
- Gehen Sie zum Cloud Firestore- Abschnitt der Firebase-Konsole .
- Wechseln Sie zur Registerkarte Indizes und klicken Sie auf Index hinzufügen .
- Geben Sie den Sammlungsnamen ein und legen Sie die Felder fest, nach denen Sie den Index sortieren möchten.
- Klicken Sie auf Erstellen .
Das Erstellen von Indizes kann je nach Größe der Abfrage einige Minuten dauern. Nachdem Sie sie erstellt haben, können Sie Ihre Indizes und ihren Status im Abschnitt „Zusammengesetzte Indizes“ sehen. Wenn sie noch bauen, enthält die Firebase-Konsole eine Gebäudestatusleiste.
Indizes entfernen
So löschen Sie einen Index:
- Gehen Sie zum Cloud Firestore- Abschnitt der Firebase-Konsole .
- Klicken Sie auf die Registerkarte Indizes .
- Bewegen Sie den Mauszeiger über den Index, den Sie löschen möchten, und wählen Sie im Kontextmenü Löschen aus.
- Bestätigen Sie, dass Sie ihn löschen möchten, indem Sie in der Warnung auf Löschen klicken.
Verwenden Sie die Firebase-CLI
Sie können Indizes auch mit der Firebase-CLI bereitstellen. Führen Sie zunächst firebase init firestore
in Ihrem Projektverzeichnis aus. Während der Einrichtung generiert die Firebase-CLI eine JSON-Datei mit den Standardindizes im richtigen Format. Bearbeiten Sie die Datei, um weitere Indizes hinzuzufügen, und stellen Sie sie mit dem Befehl firebase deploy
. Wenn Sie nur Indizes bereitstellen möchten, fügen Sie das --only firestore:indexes
hinzu. Wenn Sie mithilfe der Firebase-Konsole Änderungen an den Indizes vornehmen, stellen Sie sicher, dass Sie auch Ihre lokale Indexdatei aktualisieren. Weitere Informationen finden Sie in der Referenz zur JSON-Indexdefinition .
Erstellungszeit des Index
Um einen Index zu erstellen, muss Cloud Firestore den Index einrichten und den Index dann mit vorhandenen Daten auffüllen. Die Indexerstellungszeit ist die Summe aus Setup-Zeit und Backfill-Zeit:
Das Einrichten eines Index dauert einige Minuten. Die minimale Erstellungszeit für einen Index beträgt einige Minuten, selbst für eine leere Datenbank.
Die Backfill-Zeit 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 das Auffüllen des Index.
Indexaufbauten sind Vorgänge mit langer Ausführungszeit .
Nachdem Sie eine Indexerstellung gestartet haben, weist Cloud Firestore dem Vorgang einen eindeutigen Namen zu. Operationsnamen wird das Präfix projects/[PROJECT_ID]/databases/(default)/operations/
vorangestellt, zum Beispiel:
projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Sie können das Präfix jedoch weglassen, wenn Sie einen Vorgangsnamen für den Befehl describe
angeben.
Auflisten aller lang andauernden Vorgänge
Verwenden Sie zum Auflisten lang andauernder Vorgänge den Befehl gcloud firestore operations list . Dieser Befehl listet laufende und kürzlich abgeschlossene Vorgänge auf. Operationen werden für einige Tage nach Abschluss aufgelistet:
gcloud firestore operations list
Überprüfen Sie den Betriebsstatus
Anstatt alle Vorgänge mit langer Laufzeit aufzulisten, können Sie die Details eines einzelnen Vorgangs auflisten:
gcloud firestore operations describe operation-name
Abschätzung der Fertigstellungszeit
Sehen Sie sich während der Ausführung des Vorgangs den Wert des Statusfelds für den state
des Vorgangs an.
Eine Anforderung für den Status eines lang andauernden Vorgangs gibt auch die Metriken workEstimated
und workCompleted
. Diese Metriken werden für die Anzahl der Dokumente zurückgegeben. workEstimated
zeigt die geschätzte Gesamtzahl der Dokumente, die ein Vorgang verarbeiten wird. workCompleted
zeigt die Anzahl der bisher verarbeiteten Dokumente. Nach Abschluss des Vorgangs gibt workCompleted
die Gesamtzahl der tatsächlich verarbeiteten Dokumente wieder, die sich vom Wert von workEstimated
unterscheiden kann.
Teilen workCompleted
durch workEstimated
für eine grobe Schätzung des Fortschritts. Die Schätzung ist möglicherweise ungenau, da sie von einer verzögerten Statistikerfassung abhängt.
Hier ist beispielsweise der Fortschrittsstatus einer Indexerstellung:
{ "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 eine Operation abgeschlossen ist, enthält die Beschreibung der Operation "done": true
. Das Ergebnis der Operation finden Sie im Wert des state
. Wenn das done
-Feld in der Antwort nicht gesetzt ist, dann ist sein Wert false
. Verlassen Sie sich bei laufenden Vorgängen nicht auf das Vorhandensein des done
.
Fehler bei der Indexerstellung
Bei der Verwaltung zusammengesetzter Indizes und Einzelfeld-Indexausnahmen können Indexerstellungsfehler auftreten. Ein Indizierungsvorgang kann fehlschlagen, wenn Cloud Firestore ein Problem mit den zu indizierenden Daten feststellt. In den meisten Fällen bedeutet dies, dass Sie ein Indexlimit erreicht haben . Beispielsweise kann die Operation die maximale Anzahl von Indexeinträgen pro Dokument erreicht haben.
Wenn die Indexerstellung fehlschlägt, sehen Sie die Fehlermeldung in der Konsole. Nachdem Sie überprüft haben, dass Sie keine Indexgrenzen erreichen , wiederholen Sie Ihren Indexvorgang.