Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

Indexe in Cloud Firestore verwalten

Cloud Firestore stellt die Abfrageleistung sicher, indem für jede Abfrage ein Index erforderlich ist. Die für die grundlegendsten Abfragen erforderlichen Indizes werden automatisch für Sie erstellt. Während Sie Ihre App verwenden und testen, generiert Cloud Firestore Fehlermeldungen, die Sie beim Erstellen zusätzlicher Indexe unterstützen, 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 eine zusammengesetzte Abfrage mit einer Bereichsklausel versuchen, 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 ausgefüllten Informationen und klicken Sie auf Erstellen .

Verwenden Sie die Firebase-Konsole

So erstellen Sie manuell einen neuen Index über die Firebase-Konsole:

Bild der Firestore-Indexierungsoberfläche in der Firebase-Konsole

  1. Rufen Sie den Abschnitt Cloud Firestore der Firebase-Konsole auf .
  2. Gehen Sie zur Registerkarte Indizes und klicken Sie auf Index hinzufügen .
  3. Geben Sie den Sammlungsnamen ein und legen Sie die Felder fest, nach denen der Index sortiert werden soll.
  4. Klicken Sie auf Erstellen .

Die Erstellung 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:

  1. Rufen Sie den Abschnitt Cloud Firestore der Firebase-Konsole auf .
  2. Klicken Sie auf die Registerkarte Indizes .
  3. Bewegen Sie den Mauszeiger über den Index, den Sie löschen möchten, und wählen Sie Löschen aus dem Kontextmenü.
  4. Bestätigen Sie, dass Sie es , indem Sie auf Löschen aus dem Alert löschen möchten.

Verwenden der 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 . Wenn Sie mit der Firebase-Konsole Änderungen an den Indizes vornehmen, müssen Sie auch Ihre lokale Indexdatei aktualisieren. Weitere Informationen finden Sie in der Referenz zur JSON-Indexdefinition .

Indexerstellungszeit

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 Einrichtungszeit und Backfill-Zeit:

  • Das Einrichten eines Index dauert einige Minuten. Die Mindesterstellungszeit für einen Index beträgt einige Minuten, selbst bei einer leeren 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 es, den Index aufzufüllen.

Indexbuilds sind Vorgänge mit langer Laufzeit .

Nachdem Sie einen Index-Build gestartet haben, weist Cloud Firestore dem Vorgang einen eindeutigen Namen zu. projects/[PROJECT_ID]/databases/(default)/operations/ haben das Präfix projects/[PROJECT_ID]/databases/(default)/operations/ , zum Beispiel:

projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

Sie können das Präfix jedoch weglassen, wenn Sie einen Operationsnamen für den Befehl describe angeben.

Auflistung aller lang andauernden Vorgänge

Um lang andauernde Vorgänge aufzulisten , verwenden Sie den Befehl gcloud firestore operations list . Dieser Befehl listet laufende und kürzlich abgeschlossene Operationen auf. Operationen werden für einige Tage nach Abschluss aufgelistet:

gcloud firestore operations list

Betriebsstatus prüfen

Anstatt alle lang andauernden Vorgänge aufzulisten, können Sie die Details eines einzelnen Vorgangs auflisten:

gcloud firestore operations describe operation-name

Schätzung der Fertigstellungszeit

Als Ihr Betrieb läuft, wird der Wert des siehe state Feld für den Gesamtzustand der Operation.

Eine Anfrage nach dem 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 an, die ein Vorgang verarbeiten wird. workCompleted zeigt die Anzahl der bisher verarbeiteten Dokumente an. Nach Abschluss des workCompleted spiegelt workCompleted die Gesamtzahl der tatsächlich verarbeiteten Dokumente wider, die vom Wert von workEstimated .

workCompleted durch workEstimated für eine grobe Fortschrittsschätzung. Die Schätzung kann ungenau sein, 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 ein Vorgang abgeschlossen ist, enthält die Vorgangsbeschreibung "done": true . Siehe den Wert des state für das Ergebnis der Operation. Wenn das Feld done in der Antwort nicht gesetzt ist, ist sein Wert false . Verlassen Sie sich nicht auf das Vorhandensein des done Werts für laufende Operationen.

Fehler bei der Indexerstellung

Beim Verwalten von zusammengesetzten Indizes und Einzelfeldindexausnahmen können Fehler bei der Indexerstellung auftreten. Ein Indexierungsvorgang kann fehlschlagen, wenn in Cloud Firestore ein Problem mit den zu indexierenden Daten auftritt. 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, wird die Fehlermeldung in der Konsole angezeigt. Nachdem Sie sich vergewissert haben, dass keine Indexgrenzwerte erreicht werden , wiederholen Sie den Indexvorgang.