Auf dieser Seite wird beschrieben, wie Sie Ihre Indexe verwalten. Weitere Informationen zu Indexen finden Sie unter Übersicht zu Indexen.
Hinweis
Bevor Sie einen Index in Cloud Firestore erstellen können, muss Ihnen eine der folgenden Rollen zugewiesen sein:
roles/datastore.ownerroles/datastore.indexAdminroles/editorroles/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.createdatastore.indexes.deletedatastore.indexes.getdatastore.indexes.listdatastore.indexes.update
Index erstellen
So erstellen Sie einen Index:
MongoDB API
Verwenden Sie die createIndex() Methode, um einen Index zu erstellen. Beispiel:
-
db.restaurants.createIndex({"cuisine" : 1})
-
db.restaurants.createIndex({"cuisine" : 1}, {sparse: true})
-
Die Indexerstellung mit
db.runCommand()wird ebenfalls unterstützt, jedoch mit maximal einem Index.db.runCommand({"createIndexes":"restaurant", "index": [{"key": {"cuisine":1}, {"name": "cuisine_index"}]})
Beachten Sie die folgenden Beschränkungen:
- Sie können nur einen Index pro Anfrage erstellen.
db.collection.createIndexes()wird nicht unterstützt. - In Audit-Logs für die Indexerstellung mit der MongoDB API wird der Methodenname
google.firestore.admin.v1.FirestoreAdmin.CreateIndexverwendet. - Informationen zu unterstützten Indexoptionen finden Sie unter Indexe und Indexeigenschaften.
Firebase Konsole
-
Rufen Sie in der Firebase Konsole die Firestore-Datenbank Seite auf.
- Wählen Sie eine Datenbank aus der Liste der Datenbanken aus.
- Klicken Sie auf dem Tab Indexe auf Index erstellen.
- Geben Sie eine Sammlungs-ID ein.
- Fügen Sie einen oder mehrere Feldpfade hinzu und wählen Sie für jeden eine Indexoption aus.
- Wählen Sie eine Option für die Feldpräsenz aus: „Nicht spärlich“ oder „Spärlich“.
- Optional können Sie die Option für Multikey-Indexe festlegen.
- Klicken Sie auf Erstellen.
- Ihr neuer Index wird in der Liste der Indexe angezeigt und Cloud Firestore beginnt mit dem Erstellen des Index. Wenn der Index erstellt wurde, wird neben dem Index ein grünes Häkchen angezeigt. 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. Legen Sie api-scope auf mongodb-compatible-api fest.
gcloud firestore indexes composite create \ --database='DATABASE_ID' \ --collection-group=COLLECTION \ --field-config=FIELD_CONFIGURATION \ --query-scope=collection-group \ --density=dense \ --api-scope=mongodb-compatible-api
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=descendingWeitere Informationen zum Konfigurieren dieser Felder finden Sie unter
--field-config.
Wenn Sie einen spärlichen Index erstellen möchten, legen Sie --density=sparse-any fest.
Wenn Sie einen Multikey-Index erstellen möchten, fügen Sie das Flag --multikey hinzu.
Wenn Sie einen eindeutigen Index erstellen möchten, fügen Sie das Flag --unique hinzu.
Terraform
Verwenden Sie die
google_firestore_index
Ressource und legen Sie api_scope auf MONGODB_COMPATIBLE_API und query_scope auf COLLECTION_GROUP fest.
resource "google_firestore_index" "index" { database = "DATABASE_ID" collection = "COLLECTION" api_scope = "MONGODB_COMPATIBLE_API" 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
ASCENDINGoderDESCENDING - DENSITY: Einer der Werte
SPARSE_ANYoderDENSE
Index löschen
So löschen Sie einen Index:
MongoDB API
Verwenden Sie die dropIndex() Methode, um einen Index zu löschen. Beispiel:
Index anhand des Indexnamens löschen
db.restaurants.dropIndex("cuisine_index")
Index anhand der Indexdefinition löschen
db.restaurants.dropIndex({"cuisine" : 1})
Firebase Konsole
-
Rufen Sie in der Firebase Konsole die Firestore-Datenbank Seite auf.
- Wählen Sie eine Datenbank aus der Liste der Datenbanken aus.
- Klicken Sie auf den Tab Indexe.
- Wählen Sie in der Liste der Indexe über die Schaltfläche Mehr für den Index, den Sie löschen möchten, die Option Löschen aus.
- Klicken Sie auf Index löschen.
gcloud CLI
Verwenden Sie den
gcloud firestore indexes composite listBefehl, um den Namen des Index zu ermitteln.gcloud firestore indexes composite list \ --database='DATABASE_ID'
Ersetzen Sie DATABASE_ID durch die Datenbank-ID.
-
Verwenden Sie den
gcloud firestore indexes composite deleteBefehl, 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 die Indexeinträge anschließend mit vorhandenen Daten auffüllen. Die Zeit, die zum Erstellen eines Index benötigt wird, hängt von den folgenden Faktoren ab:
Die Mindesterstellungszeit für einen Index beträgt einige Minuten, auch bei einer leeren Datenbank.
Die Zeit, die zum Auffü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 befü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 dem Erstellen 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 von Vorgängen mit langer Ausführungszeit 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 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.
Um den Fortschritt eines Vorgangs zu schätzen, teilen Sie workCompleted durch workEstimated.
Hier sehen Sie ein Beispiel für den Fortschritt der 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. 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, ist der Vorgang noch nicht abgeschlossen.