Indexe verwalten

Firestore sichert die Abfrageleistung, da für jede Abfrage ein Index erforderlich ist. Die für die einfachsten Abfragen erforderlichen Indexe werden automatisch erstellt. Wenn Sie Ihre Anwendung verwenden und testen, generiert Cloud Firestore Fehlermeldungen, die Ihnen helfen können, zusätzliche Indexe zu erstellen, die für Ihre Anwendung erforderlich sind. Auf dieser Seite wird die Verwaltung von Einzelfeld- und zusammengesetzten Indexen beschrieben.

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 eine Fehlermeldung. Die Fehlermeldung enthält einen direkten Link zum Erstellen des fehlenden Index in der Firebase Console.

Klicken Sie auf den generierten 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 Einzelfeld-Indexierungsausnahmen und 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, und 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 der Erstellung des Index. Wenn der Index erstellt 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 der zusammengesetzten Indexe für den Index, den Sie löschen möchten, auf die Schaltfläche Mehr . Klicken Sie auf Löschen.

  3. Bestätigen Sie, dass der Index gelöscht werden soll, indem Sie in der Benachrichtigung auf Index löschen klicken.

Einzelfeld-Indexausnahme hinzufügen

Mit Einzelfeld-Indexausnahmen können Sie automatische Indexeinstellungen für bestimmte Felder in einer Sammlung überschreiben. Sie können über die Console Ausnahmen für ein einzelnes Feld hinzufügen:

  1. Gehen 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 automatisch aktualisierte aufsteigende, absteigende und arraybasierte Einzelfeldindexe für dieses Feld.

  5. Klicken Sie auf Ausnahme speichern.

Einzelfeld-Indexausnahme löschen

So löschen Sie eine Einzelfeld-Indexausnahme:

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

    Zum Abschnitt Einzelfeldindexe“

  2. Klicken Sie in der Liste der Ausnahmen für die Einzelfeldindexe auf die Schaltfläche Mehr für die Ausnahme, die Sie löschen möchten. Klicken Sie auf Löschen.

  3. Bestätigen Sie, dass Sie diese Ausnahme löschen möchten, indem Sie in der Benachrichtigung auf Löschen klicken.

Wenn Sie eine Ausnahme für ein einzelnes Feld löschen, werden für das angegebene Feld oder Unterfeld die übernommenen Indexierungseinstellungen verwendet. Dokumentfelder werden auf die automatischen Indexeinstellungen Ihrer Datenbank zurückgesetzt. Für Unterfelder in einer Zuordnung werden alle Ausnahmen für übergeordnete Felder übernommen, bevor die automatischen Indexeinstellungen übernommen werden.

Firebase CLI verwenden

Sie können Indexe auch mit der Firebase-Befehlszeile bereitstellen. Führen Sie zuerst firebase init firestore in Ihrem Projektverzeichnis aus. Während der Einrichtung generiert die Firebase-Befehlszeile 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 Indexe mithilfe der Firebase Console bearbeiten, müssen Sie auch Ihre lokale Indexdatei aktualisieren. Referenz zur JSON-Indexdefinition

Indexerstellungszeit

Zum Erstellen eines Index muss Firestore den Index einrichten und den Index anschließend mit vorhandenen Daten auffüllen. Die Indexerstellungszeit ist die Summe der Einrichtungs- und Backfill-Zeit:

  • Das Einrichten eines Index dauert einige Minuten. Die Mindesterstellungszeit für einen Index beträgt selbst bei einer leeren Datenbank einige Minuten.

  • Die Backfill-Zeit hängt davon ab, wie viele vorhandene Daten zum neuen Index gehören. Je mehr Feldwerte der Indexdefinition entsprechen, desto länger dauert das Auffüllen des Index.

Index-Builds sind lang andauernde Vorgänge.

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

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

Alle lang andauernden Vorgänge auflisten

Verwenden Sie zum Auflisten lang andauernder Vorgänge den Befehl gcloud firestore operations list. Mit diesem Befehl werden laufende und kürzlich abgeschlossene Vorgänge aufgelistet. Nach Abschluss werden einige Vorgänge aufgelistet:

gcloud firestore operations list

Vorgangsstatus prüfen

Anstatt alle Vorgänge mit langer Ausführungszeit aufzulisten, können Sie die Details eines einzelnen Vorgangs auflisten:

gcloud firestore operations describe operation-name

Fertigstellungszeit schätzen

Während der Ausführung eines Vorgangs wird im Status des Felds state der Gesamtstatus des Vorgangs angezeigt.

Eine Anfrage für den Status eines lang andauernden Vorgangs 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 von einem Vorgang verarbeitet werden. workCompleted gibt die Anzahl der bisher verarbeiteten Dokumente an. Nach Abschluss des Vorgangs gibt workCompleted die Gesamtzahl der Dokumente an, die tatsächlich verarbeitet wurden, was sich vom Wert von workEstimated unterscheiden kann.

Teilen Sie workCompleted durch workEstimated, um den ungefähren Fortschritt zu schätzen. Die Schätzung ist möglicherweise ungenau, da sie von der verzögerten Statistikerfassung abhängt.

Dies ist beispielsweise der Status 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. Das Ergebnis des Vorgangs finden Sie im Wert des Felds state. Wenn das Feld done nicht in der Antwort festgelegt ist, lautet der Wert false. Verlassen Sie sich bei laufenden Vorgängen nicht auf den Wert done.

Fehler bei der Indexerstellung

Beim Verwalten zusammengesetzter Indexe und Einzelfeld-Index-Ausnahmen können Fehler bei der Indexerstellung auftreten. Ein Indexierungsvorgang kann fehlschlagen, wenn in Firestore ein Problem mit den Daten auftritt. Meist bedeutet dies, dass Sie ein Indexlimit erreicht haben. Der Vorgang kann beispielsweise die maximale Anzahl von Indexeinträgen pro Dokument erreicht haben.

Wenn die Indexerstellung fehlschlägt, wird die Fehlermeldung in der Console angezeigt. Nachdem Sie festgestellt haben, dass die Indexlimits nicht erreicht wurden, wiederholen Sie den Indexvorgang.