Indexe verwalten

Firestore gewährleistet die Abfrageleistung durch verbindliche Verwendung von Indexen für jede Abfrage. Die für grundlegende Abfragen erforderlichen Indexe werden automatisch erstellt. Während Sie Ihre Anwendung verwenden und testen, zeigt Cloud Firestore Fehlermeldungen an, mit deren Hilfe Sie zusätzliche Indexe erstellen können, die für Ihre Anwendung erforderlich sind. Auf dieser Seite wird beschrieben, wie Sie Ihre Einzelfeldindexe und zusammengesetzten Indexe verwalten.

Fehlenden Index über eine Fehlermeldung erstellen

Wenn Sie versuchen, eine kumulierende Abfrage mit einer Bereichsklausel auszuführen, die keinem vorhandenen Index zugeordnet ist, erhalten Sie einen Fehler. Die Fehlermeldung enthält einen direkten Link zum Erstellen des fehlenden Index in der Firebase Console.

Folgen Sie dem erstellten Link zur Firebase Console, prüfen Sie die automatisch ausgefüllten Informationen und klicken Sie auf Erstellen.

Google Cloud Platform Console verwenden

Über die Google Cloud Platform Console können Sie Einzelfeldindex-Ausnahmen sowie zusammengesetzte Indexe verwalten.

Zusammengesetzten Index erstellen

So erstellen Sie manuell einen neuen zusammengesetzten Index über die GCP Console:

  1. Wechseln Sie zum Abschnitt Zusammengesetzte Indexe.

    Zum Abschnitt "Zusammengesetzte Indexe"

  2. Klicken Sie auf Index erstellen.

  3. Geben Sie eine Sammlungs-ID ein. Fügen Sie die Namen der Felder, die Sie indexieren möchten, sowie einen Indexmodus für jedes Feld hinzu. Klicken Sie auf Index speichern.

Ihr neuer Index wird in der Liste der zusammengesetzten Indexe angezeigt und Firestore beginnt mit dem Erstellen des Index. Wenn der Index angelegt ist, wird neben dem Index ein grünes Häkchen angezeigt.

Zusammengesetzten Index löschen

So löschen Sie einen zusammengesetzten Index:

  1. Wechseln Sie zum Abschnitt Zusammengesetzte Indexe.

    Zum Abschnitt "Zusammengesetzte Indexe"

  2. Klicken Sie in der Liste Ihrer zusammengesetzten Indexe auf den Eintrag für den Index, den Sie löschen möchten. Klicken Sie auf Löschen.

  3. Bestätigen Sie, dass dieser Index gelöscht werden soll. Klicken Sie dafür in der Benachrichtigung auf Index löschen.

Einzelfeldindex-Ausnahme hinzufügen

Mit Einzelfeldindex-Ausnahmen können Sie die Einstellungen für die automatische Indexierung für bestimmte Felder in einer Sammlung überschreiben. Sie können Ausnahmen für Einzelfelder über die Konsole hinzufügen:

  1. Wechseln Sie zum Abschnitt Einzelfeldindexe.

    Zum Abschnitt "Einzelfeldindexe"

  2. Klicken Sie auf Ausnahme hinzufügen.

  3. Geben Sie eine Sammlungs-ID und einen Feldpfad ein.

  4. Wählen Sie neue Indexierungseinstellungen für dieses Feld aus. Aktivieren oder deaktivieren Sie für dieses Feld automatisch aktualisierte aufsteigende, absteigende und "array-contains"-Einzelfeldindexe.

  5. Klicken Sie auf Ausnahme speichern.

Einzelfeldindex-Ausnahme löschen

So löschen Sie eine Einzelfeldindex-Ausnahme:

  1. Wechseln Sie in der Firestore-Ansicht zum Abschnitt Einzelfeldindexe.

    Zum Abschnitt "Einzelfeldindexe"

  2. Klicken Sie auf Ausnahme hinzufügen.

  3. Geben Sie eine Sammlungs-ID und einen Feldnamen ein.

  4. Klicken Sie in der Liste der Einzelfeldindex-Ausnahmen auf den Eintrag für die Ausnahme, die Sie löschen möchten. Klicken Sie auf Löschen.

  5. Bestätigen Sie, dass Sie diese Ausnahme löschen möchten. Klicken Sie dafür in der Benachrichtigung auf Ausnahme löschen.

Wenn Sie eine Einzelfeldausnahme löschen, werden für das angegebene Feld oder Unterfeld die übernommenen Indexierungseinstellungen verwendet. Dokumentfelder werden auf die Einstellungen Ihrer Datenbank für die automatische Indexierung zurückgesetzt. Für Unterfelder in einer Karte werden alle Ausnahmen der übergeordneten Felder übernommen, bevor die Einstellungen für die automatische Indexierung übernommen werden.

Firebase CLI verwenden

Sie können Indexe auch mit Firebase CLI bereitstellen. Führen Sie zuerst firebase init firestore in Ihrem Projektverzeichnis aus. Während der Einrichtung erstellt Firebase CLI eine JSON-Datei mit den Standardindexen im richtigen Format. Bearbeiten Sie die Datei, um weitere Indexe hinzuzufügen, und stellen Sie sie mit dem Befehl firebase deploy bereit. Wenn Sie nur Indexe bereitstellen möchten, fügen Sie das Flag --only firestore:indexes hinzu. Wenn Sie mithilfe der Firebase Console Änderungen an den Indexen vornehmen, denken Sie daran, auch die lokale Indexdatei zu aktualisieren. Weitere Informationen finden Sie in der Referenz zur JSON-Indexdefinition.

Indexerstellungszeit

Zum Erstellen eines Indexes muss Firestore den Index einrichten und diesen anschließend mit vorhandenen Daten füllen. Die Indexerstellungszeit ergibt sich aus der Summe der Einrichtungs- und der Backfill-Zeit:

  • Die Einrichtung eines Index dauert einige Minuten. Die minimale Build-Zeit für einen Index beträgt einige Minuten, selbst bei einer leeren Datenbank.

  • Die Dauer des Backfill 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 der Index befüllt ist.

Index-Builds sind Vorgänge mit langer Ausführungszeit.

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

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

Wenn Sie für den Befehl describe einen Vorgangsnamen angeben, können Sie das Präfix weglassen.

Lang andauernde Vorgänge auflisten

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. 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. Diese Messwerte werden für die Anzahl der Dokumente zurückgegeben. 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.

Teilen Sie workCompleted durch workEstimated, um eine grobe Schätzung des Fortschritts zu erhalten. Die Schätzung ist möglicherweise ungenau, da sie von der verzögerten Statistikerfassung abhängt.

Dies ist der Fortschrittsstatus eines Index-Builds:

{
  "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, lautet der Wert false. Verlassen Sie sich bei laufenden Vorgängen nicht auf die Existenz des Werts done.

Fehler bei der Indexerstellung

Bei der Nutzung von zusammengesetzten Indexen und Einzelfeldindex-Ausnahmen kann es zu Fehlern der Indexerstellung kommen. Ein Indexierungsvorgang kann fehlschlagen, wenn in Firestore ein Problem mit den Daten auftritt, die indexiert werden sollen. In den meisten Fällen bedeutet dies, dass Sie ein Indexlimit erreicht haben. Beispielsweise hat der Vorgang möglicherweise die maximale Anzahl von Indexeinträgen pro Dokument erreicht.

Wenn die Indexerstellung fehlschlägt, wird die entsprechende Fehlermeldung in der Console angezeigt. Nachdem Sie bestätigt haben, dass Sie keine Indexlimits erreicht haben, führen Sie den Indexierungsvorgang nochmal aus.