Indexe verwalten

Auf dieser Seite wird beschrieben, wie Sie Ihre Indexe für die Firestore Enterprise Edition verwalten.

Weitere Informationen zu Indexen in der Firestore Enterprise Edition finden Sie unter Übersicht über Indexe.

Hinweis

Bevor Sie einen Index in Cloud Firestore 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 Cloud Firestore Rollen und den zugehörigen Berechtigungen finden Sie unter Vordefinierte Rollen.

Wenn Sie benutzerdefinierte Rollen definiert haben, weisen Sie alle folgenden Berechtigungen zu, um Indexe zu erstellen:

  • datastore.indexes.create
  • datastore.indexes.delete
  • datastore.indexes.get
  • datastore.indexes.list
  • datastore.indexes.update

Index erstellen

So erstellen Sie einen Index:

Firebase Konsole
  1. Rufen Sie in der Firebase Konsole die Firestore-Datenbank Seite auf.

    Zur Firestore-Datenbank

  2. Wählen Sie in der Liste der Datenbanken eine Datenbank aus.
  3. Klicken Sie auf dem Tab Indexe auf Index erstellen.
  4. Geben Sie eine Sammlungs-ID ein.
  5. Fügen Sie einen oder mehrere Feldpfade hinzu und wählen Sie für jeden eine Indexoption aus.
  6. Wählen Sie eine Option für die Feldpräsenz aus: „Nicht spärlich“ oder „Spärlich“.
  7. Klicken Sie auf Erstellen.
  8. Ihr neuer Index wird in der Liste der Indexe angezeigt und Cloud Firestore beginnt mit der Erstellung des Index. Wenn der Index erstellt wurde, sehen Sie neben dem Index ein grünes Häkchen. Wenn der Index nicht erstellt wurde, finden Sie unter Fehler beim Erstellen von Indexen mögliche Ursachen.
gcloud CLI

Verwenden Sie den gcloud firestore indexes composite create Befehl, um einen Index zu erstellen.

gcloud firestore indexes composite create \
--database='DATABASE_ID' \
--collection-group=COLLECTION \
--field-config=FIELD_CONFIGURATION \
--query-scope=collection-group \
--density=dense

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.

Setzen Sie --density=sparse-any, um einen spärlichen Index zu erstellen.

Fügen Sie das Flag --unique hinzu, um einen eindeutigen Index zu erstellen.

Terraform

Verwenden Sie die google_firestore_index Ressource.

resource "google_firestore_index" "index" {
  database    = "DATABASE_ID"
  collection  = "COLLECTION"
  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: Einer der Werte ASCENDING oder DESCENDING
  • DENSITY: Einer der Werte SPARSE_ANY oder DENSE

Index löschen

So löschen Sie einen Index:

Firebase Konsole
  1. Rufen Sie in der Firebase Konsole die Firestore-Datenbank Seite auf.

    Zur Firestore-Datenbank

  2. Wählen Sie in der Liste der Datenbanken eine Datenbank aus.
  3. Klicken Sie auf den Tab Indexe.
  4. 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.
  5. Klicken Sie auf Index löschen.
gcloud CLI
  1. Verwenden Sie den gcloud firestore indexes composite list Befehl, um den Namen des Index zu ermitteln.

    gcloud firestore indexes composite list \
    --database='DATABASE_ID'

    Ersetzen Sie DATABASE_ID durch die Datenbank-ID.

  2. Verwenden Sie den gcloud firestore indexes composite delete Befehl, 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 Index muss Cloud Firestore den Index erstellen und anschließend die Indexeinträge mit vorhandenen Daten füllen. Die Zeit, die zum Erstellen eines Index benötigt wird, hängt von den folgenden Faktoren ab:

  • Die Mindestdauer für die Erstellung eines Index beträgt einige Minuten, auch für eine leere Datenbank.

  • Die Zeit, die zum Füllen von Indexeinträgen benötigt wird, 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 gefü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 Vorgängen mit langer Ausführungszeit für Indexe arbeiten.

Nachdem Sie mit der Erstellung eines Index begonnen haben, weist Cloud Firestore 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 Vorgänge mit langer Ausführungszeit auflisten

Verwenden Sie zum Auflisten lang andauernder Vorgänge den gcloud firestore operations list Befehl. 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 zeigt 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 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.

Im Folgenden sehen Sie ein Beispiel für den Fortschritt der Erstellung 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. Sehen Sie sich den Wert des Feldes state für das Ergebnis des Vorgangs an. Wenn das Feld done in der Antwort nicht festgelegt ist, wurde der Vorgang noch nicht abgeschlossen.