Indextypen in Cloud Firestore

Indizes sind ein wichtiger Faktor für die Leistung einer Datenbank. Ähnlich wie der Index eines Buches, der Themen in einem Buch den Seitenzahlen zuordnet, ordnet ein Datenbankindex die Elemente in einer Datenbank ihren Positionen in der Datenbank zu. Wenn Sie einer Datenbank eine Abfrage senden, kann die Datenbank mithilfe eines Indexes schnell nach den Standorten der von Ihnen angeforderten Elemente suchen.

Auf dieser Seite werden die beiden Arten von Indizes beschrieben, die Cloud Firestore verwendet: Einzelfeldindizes und zusammengesetzte Indizes .

Ein Index hinter jeder Abfrage

Wenn für eine Abfrage kein Index vorhanden ist, durchsuchen die meisten Datenbanken ihren Inhalt Element für Element, ein langsamer Prozess, der mit zunehmender Datenbankgröße noch langsamer wird. Cloud Firestore garantiert eine hohe Abfrageleistung durch die Verwendung von Indizes für alle Abfragen. Daher hängt die Abfrageleistung von der Größe des Ergebnissatzes und nicht von der Anzahl der Elemente in der Datenbank ab.

Weniger Indexverwaltung, mehr App-Entwicklung

Cloud Firestore umfasst Funktionen, die den Zeitaufwand für die Verwaltung von Indizes reduzieren. Die für die grundlegendsten Abfragen erforderlichen Indizes werden automatisch für Sie erstellt. Während Sie Ihre App verwenden und testen, hilft Ihnen Cloud Firestore dabei , zusätzliche Indizes zu identifizieren und zu erstellen, die Ihre App benötigt.

Indextypen

Cloud Firestore verwendet zwei Arten von Indizes: Einzelfeld- und zusammengesetzte Indizes. Neben der Anzahl der indizierten Felder unterscheiden sich Einzelfeld- und zusammengesetzte Indizes auch in der Art und Weise, wie Sie sie verwalten.

Einzelfeldindizes

Ein Einzelfeldindex speichert eine sortierte Zuordnung aller Dokumente in einer Sammlung, die ein bestimmtes Feld enthalten. Jeder Eintrag in einem Einzelfeldindex zeichnet den Wert eines Dokuments für ein bestimmtes Feld und den Speicherort des Dokuments in der Datenbank auf. Cloud Firestore verwendet diese Indizes, um viele grundlegende Abfragen durchzuführen. Sie verwalten Einzelfeldindizes, indem Sie die automatischen Indexierungseinstellungen und Indexausnahmen Ihrer Datenbank konfigurieren.

Automatische Indizierung

Standardmäßig verwaltet Cloud Firestore automatisch Einzelfeldindizes für jedes Feld in einem Dokument und jedes Unterfeld in einer Karte. Cloud Firestore verwendet die folgenden Standardeinstellungen für Einzelfeldindizes:

  • Für jedes Nicht-Array- und Nicht-Zuordnungsfeld definiert Cloud Firestore zwei Einzelfeldindizes für den Sammlungsbereich , einen im aufsteigenden Modus und einen im absteigenden Modus.

  • Für jedes Kartenfeld erstellt Cloud Firestore Folgendes:

    • Ein aufsteigender Index im Sammlungsbereich für jedes Nicht-Array- und Nicht-Map-Unterfeld.
    • Ein absteigender Index im Sammlungsbereich für jedes Nicht-Array- und Nicht-Zuordnungs-Unterfeld.
    • Ein Array im Sammlungsbereich enthält einen Index für jedes Array-Unterfeld.
    • Cloud Firestore indiziert jedes Kartenunterfeld rekursiv.
  • Für jedes Array-Feld in einem Dokument erstellt und verwaltet Cloud Firestore einen Array-Contains-Index im Sammlungsbereich.

  • Einzelfeldindizes mit Sammlungsgruppenbereich werden standardmäßig nicht verwaltet.

Ausnahmen für Einzelfeldindizes

Sie können ein Feld von Ihren automatischen Indexierungseinstellungen ausnehmen, indem Sie eine Ausnahme für den Einzelfeldindex erstellen. Eine Ausnahme von der Indizierung setzt die datenbankweiten automatischen Indexeinstellungen außer Kraft. Eine Ausnahme kann einen Einzelfeldindex aktivieren, den Ihre Einstellungen für die automatische Indizierung andernfalls deaktivieren würden, oder einen Einzelfeldindex deaktivieren, den die automatische Indizierung andernfalls aktivieren würde. Informationen zu Fällen, in denen Ausnahmen nützlich sein können, finden Sie in den Best Practices für die Indizierung .

Verwenden Sie den Feldpfadwert * , um Indexausnahmen auf Sammlungsebene für alle Felder in einer Sammlungsgruppe hinzuzufügen. Legen Sie beispielsweise für comments den Feldpfad auf * fest, um mit allen Feldern in der comments übereinzustimmen, und deaktivieren Sie die Indizierung aller Felder unter der Sammlungsgruppe. Anschließend können Sie Ausnahmen hinzufügen, um nur die für Ihre Abfragen erforderlichen Felder zu indizieren. Durch die Reduzierung der Anzahl indizierter Felder werden die Speicherkosten gesenkt und die Schreibleistung verbessert.

Wenn Sie für ein Kartenfeld eine Einzelfeldindexausnahme erstellen, erben die Unterfelder der Karte diese Einstellungen. Sie können jedoch Ausnahmen für Einzelfeldindizes für bestimmte Unterfelder definieren. Wenn Sie eine Ausnahme für ein Unterfeld löschen, erbt das Unterfeld die Ausnahmeeinstellungen seines übergeordneten Felds, sofern vorhanden, oder die datenbankweiten Einstellungen, wenn keine übergeordneten Ausnahmen vorhanden sind.

Informationen zum Erstellen und Verwalten von Ausnahmen für Einzelfeldindizes finden Sie unter Verwalten von Indizes in Cloud Firestore .

Zusammengesetzte Indizes

Ein zusammengesetzter Index speichert eine sortierte Zuordnung aller Dokumente in einer Sammlung, basierend auf einer geordneten Liste der zu indizierenden Felder.

Cloud Firestore verwendet zusammengesetzte Indizes, um Abfragen zu unterstützen, die nicht bereits von Einzelfeldindizes unterstützt werden.

Cloud Firestore erstellt aufgrund der großen Anzahl möglicher Feldkombinationen nicht automatisch zusammengesetzte Indizes wie Einzelfeldindizes. Stattdessen hilft Ihnen Cloud Firestore beim Erstellen Ihrer App , erforderliche zusammengesetzte Indizes zu identifizieren und zu erstellen .

Wenn Sie die obige Abfrage versuchen, ohne zuvor den erforderlichen Index zu erstellen, gibt Cloud Firestore eine Fehlermeldung mit einem Link zurück, dem Sie folgen können, um den fehlenden Index zu erstellen. Dies geschieht jedes Mal, wenn Sie eine Abfrage versuchen, die nicht von einem Index unterstützt wird. Sie können zusammengesetzte Indizes auch manuell definieren und verwalten, indem Sie die Konsole oder die Firebase-CLI verwenden. Weitere Informationen zum Erstellen und Verwalten zusammengesetzter Indizes finden Sie unter Verwalten von Indizes .

Indexmodi und Abfragebereiche

Sie konfigurieren Einzelfeld- und zusammengesetzte Indizes unterschiedlich, aber beide erfordern, dass Sie Indexmodi und Abfragebereiche für Ihre Indizes konfigurieren.

Indexmodi

Wenn Sie einen Index definieren, wählen Sie für jedes indizierte Feld einen Indexmodus aus. Der Indexmodus jedes Felds unterstützt spezifische Abfrageklauseln für dieses Feld. Sie können aus folgenden Indexmodi wählen:

Indexmodus Beschreibung
Aufsteigender Unterstützt die Abfrageklauseln < , <= , == , >= , > , != , in und not-in für das Feld und unterstützt die Sortierung der Ergebnisse in aufsteigender Reihenfolge basierend auf diesem Feldwert.
Absteigender Unterstützt die Abfrageklauseln < , <= , == , >= , > , != , in und not-in für das Feld und unterstützt die Sortierung der Ergebnisse in absteigender Reihenfolge basierend auf diesem Feldwert.
Array enthält Unterstützt die Abfrageklauseln array-contains und array-contains-any für das Feld.

Abfragebereiche

Jeder Index ist entweder auf eine Sammlung oder eine Sammlungsgruppe beschränkt. Dies wird als Abfragebereich des Index bezeichnet:

Sammlungsumfang
Cloud Firestore erstellt standardmäßig Indizes mit Sammlungsbereich. Diese Indizes unterstützen Abfragen, die Ergebnisse aus einer einzelnen Sammlung zurückgeben.

Geltungsbereich der Sammlungsgruppe
Eine Sammlungsgruppe umfasst alle Sammlungen mit derselben Sammlungs-ID. Um eine Sammlungsgruppenabfrage auszuführen, die gefilterte oder geordnete Ergebnisse aus einer Sammlungsgruppe zurückgibt, müssen Sie einen entsprechenden Index mit Sammlungsgruppenbereich erstellen.

Standardreihenfolge und das Feld __name__

Zusätzlich zum Sortieren von Dokumenten nach den für jedes Feld angegebenen Indexmodi (aufsteigend oder absteigend) wenden Indizes eine abschließende Sortierung nach dem __name__ Feld jedes Dokuments an. Der Wert des Felds __name__ wird auf den vollständigen Dokumentpfad gesetzt. Dies bedeutet, dass Dokumente im Ergebnissatz mit denselben Feldwerten nach Dokumentpfad sortiert werden.

Standardmäßig wird das Feld __name__ in derselben Richtung sortiert wie das zuletzt sortierte Feld in der Indexdefinition. Zum Beispiel:

Sammlung Felder indiziert Abfragebereich
Städte Name, __name__ Sammlung
Städte Zustand, __name__ Sammlung
Städte Land, Bevölkerung, __name__ Sammlung

Um die Ergebnisse nach der nicht standardmäßigen __name__ Richtung zu sortieren, müssen Sie diesen Index erstellen.

Beispiel für die Indizierung

Durch die automatische Erstellung von Einzelfeldindizes für Sie ermöglicht Cloud Firestore Ihrer Anwendung, die grundlegendsten Datenbankabfragen schnell zu unterstützen. Mit Einzelfeldindizes können Sie einfache Abfragen basierend auf Feldwerten und den Komparatoren < , <= , == , >= , > und in durchführen. Für Array-Felder ermöglichen sie die Durchführung array-contains und array-contains-any Abfragen.

Betrachten Sie zur Veranschaulichung die folgenden Beispiele aus der Sicht der Indexerstellung. Der folgende Codeausschnitt erstellt einige city in einer cities und legt für jedes Dokument die Felder name “, state “, country “, capital “, „ population “ und „ tags fest:

Netz
var citiesRef = db.collection("cities");

citiesRef.doc("SF").set({
    name: "San Francisco", state: "CA", country: "USA",
    capital: false, population: 860000,
    regions: ["west_coast", "norcal"] });
citiesRef.doc("LA").set({
    name: "Los Angeles", state: "CA", country: "USA",
    capital: false, population: 3900000,
    regions: ["west_coast", "socal"] });
citiesRef.doc("DC").set({
    name: "Washington, D.C.", state: null, country: "USA",
    capital: true, population: 680000,
    regions: ["east_coast"] });
citiesRef.doc("TOK").set({
    name: "Tokyo", state: null, country: "Japan",
    capital: true, population: 9000000,
    regions: ["kanto", "honshu"] });
citiesRef.doc("BJ").set({
    name: "Beijing", state: null, country: "China",
    capital: true, population: 21500000,
    regions: ["jingjinji", "hebei"] });

Unter Annahme der Standardeinstellungen für die automatische Indizierung aktualisiert Cloud Firestore einen aufsteigenden Einzelfeldindex pro Nicht-Array-Feld, einen absteigenden Einzelfeldindex pro Nicht-Array-Feld und einen Array-enthält-Einzelfeldindex für das Array-Feld. Jede Zeile in der folgenden Tabelle stellt einen Eintrag in einem Einzelfeldindex dar:

Sammlung Feld indiziert Abfragebereich
Städte Name Sammlung
Städte -Zustand Sammlung
Städte Land Sammlung
Städte Kapital Sammlung
Städte Bevölkerung Sammlung
Städte Name Sammlung
Städte Zustand Sammlung
Städte Land Sammlung
Städte Kapital Sammlung
Städte Bevölkerung Sammlung
Städte array-contains Regionen Sammlung

Abfragen, die von Einzelfeldindizes unterstützt werden

Mithilfe dieser automatisch erstellten Einzelfeldindizes können Sie einfache Abfragen wie die folgenden ausführen:

Netz
const stateQuery = citiesRef.where("state", "==", "CA");
const populationQuery = citiesRef.where("population", "<", 100000);
const nameQuery = citiesRef.where("name", ">=", "San Francisco");

Sie können auch in und Compound-Gleichheitsabfragen ( == ) erstellen:

Netz
citiesRef.where('country', 'in', ["USA", "Japan", "China"])

// Compound equality queries
citiesRef.where("state", "==", "CO").where("name", "==", "Denver")
citiesRef.where("country", "==", "USA")
         .where("capital", "==", false)
         .where("state", "==", "CA")
         .where("population", "==", 860000)

Wenn Sie eine zusammengesetzte Abfrage ausführen müssen, die einen Bereichsvergleich ( < , <= , > oder >= ) verwendet, oder wenn Sie nach einem anderen Feld sortieren müssen, müssen Sie einen zusammengesetzten Index für diese Abfrage erstellen.

Mit dem Index array-contains “ können Sie das Array-Feld „ regions abfragen:

Netz
citiesRef.where("regions", "array-contains", "west_coast")
// array-contains-any and array-contains use the same indexes
citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"])

Von zusammengesetzten Indizes unterstützte Abfragen

Cloud Firestore verwendet zusammengesetzte Indizes, um zusammengesetzte Abfragen zu unterstützen, die nicht bereits von Einzelfeldindizes unterstützt werden. Beispielsweise benötigen Sie einen zusammengesetzten Index für die folgenden Abfragen:

Netz
citiesRef.where("country", "==", "USA").orderBy("population", "asc")
citiesRef.where("country", "==", "USA").where("population", "<", 3800000)
citiesRef.where("country", "==", "USA").where("population", ">", 690000)
// in and == clauses use the same index
citiesRef.where("country", "in", ["USA", "Japan", "China"])
         .where("population", ">", 690000)

Für diese Abfragen ist der unten stehende zusammengesetzte Index erforderlich. Da die Abfrage eine Gleichheit ( == oder in ) für das country verwendet, können Sie für dieses Feld einen aufsteigenden oder absteigenden Indexmodus verwenden. Standardmäßig wenden Ungleichheitsklauseln eine aufsteigende Sortierreihenfolge basierend auf dem Feld in der Ungleichheitsklausel an.

Sammlung Felder indiziert Abfragebereich
Städte (oder ) Land, Bevölkerung Sammlung

Um dieselben Abfragen, jedoch mit absteigender Sortierreihenfolge, auszuführen, benötigen Sie einen zusätzlichen zusammengesetzten Index in absteigender Richtung für die population :

Netz
citiesRef.where("country", "==", "USA").orderBy("population", "desc")

citiesRef.where("country", "==", "USA")
         .where("population", "<", 3800000)
         .orderBy("population", "desc")

citiesRef.where("country", "==", "USA")
         .where("population", ">", 690000)
         .orderBy("population", "desc")

citiesRef.where("country", "in", ["USA", "Japan", "China"])
         .where("population", ">", 690000)
         .orderBy("population", "desc")
Sammlung Felder indiziert Abfragebereich
Städte Land, Bevölkerung Sammlung
Städte Land , Bevölkerung Sammlung

Sie müssen außerdem einen zusammengesetzten Index erstellen, um eine array-contains oder array-contains-any Abfrage mit zusätzlichen Klauseln zu kombinieren.

Netz
citiesRef.where("regions", "array-contains", "east_coast")
         .where("capital", "==", true)

// array-contains-any and array-contains use the same index
citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"])
         .where("capital", "==", true)
Sammlung Felder indiziert Abfragebereich
Städte Array enthält Tags, (oder ) in Großbuchstaben Sammlung

Von Sammlungsgruppenindizes unterstützte Abfragen

Um einen Index mit Sammlungsgruppenumfang zu demonstrieren, stellen Sie sich vor, Sie fügen einigen city eine Untersammlung landmarks hinzu:

Netz
var citiesRef = db.collection("cities");

citiesRef.doc("SF").collection("landmarks").doc().set({
    name: "Golden Gate Bridge",
    category : "bridge" });
citiesRef.doc("SF").collection("landmarks").doc().set({
    name: "Golden Gate Park",
    category : "park" });

citiesRef.doc("DC").collection("landmarks").doc().set({
    name: "National Gallery of Art",
    category : "museum" });
citiesRef.doc("DC").collection("landmarks").doc().set({
    name: "National Mall",
    category : "park" });

Mit dem folgenden Einzelfeldindex mit Sammlungsbereich können Sie die landmarks einer einzelnen Stadt basierend auf dem category abfragen:

Sammlung Felder indiziert Abfragebereich
Sehenswürdigkeiten Kategorie (oder “) Sammlung
Netz
citiesRef.doc("SF").collection("landmarks").where("category", "==", "park")
citiesRef.doc("SF").collection("landmarks").where("category", "in", ["park", "museum"])

Stellen Sie sich nun vor, dass Sie daran interessiert sind, die Sehenswürdigkeiten in allen Städten abzufragen. Um diese Abfrage für die Sammlungsgruppe auszuführen, die aus allen landmarks besteht, müssen Sie einen landmarks Einzelfeldindex mit Sammlungsgruppenbereich aktivieren:

Sammlung Felder indiziert Abfragebereich
Sehenswürdigkeiten Kategorie (oder “) Sammlungsgruppe

Wenn dieser Index aktiviert ist, können Sie die Sammlungsgruppe der landmarks abfragen:

Netz
var landmarksGroupRef = db.collectionGroup("landmarks");

landmarksGroupRef.where("category", "==", "park")
landmarksGroupRef.where("category", "in", ["park", "museum"])

Um eine Sammlungsgruppenabfrage auszuführen, die gefilterte oder geordnete Ergebnisse zurückgibt, müssen Sie einen entsprechenden Einzelfeld- oder zusammengesetzten Index mit Sammlungsgruppenbereich aktivieren. Sammlungsgruppenabfragen, die die Ergebnisse nicht filtern oder sortieren, erfordern jedoch keine zusätzlichen Indexdefinitionen.

Sie können beispielsweise die folgende Sammlungsgruppenabfrage ausführen, ohne einen zusätzlichen Index zu aktivieren:

Netz
db.collectionGroup("landmarks").get()

Indexeinträge

Die in Ihrem Projekt konfigurierten Indizes und die Struktur eines Dokuments bestimmen die Anzahl der Indexeinträge für ein Dokument. Indexeinträge werden auf die Anzahl der Indexeinträge angerechnet.

Das folgende Beispiel demonstriert die Indexeinträge eines Dokuments.

Dokumentieren

/cities/SF

city_name : "San Francisco"
temperatures : {summer: 67, winter: 55}
neighborhoods : ["Mission", "Downtown", "Marina"]

Einzelfeldindizes

  • Stadtname ASC
  • Stadtname DESC
  • Temperaturen.Sommer ASC
  • Temperaturen.Sommer DESC
  • Temperaturen.Winter ASC
  • Temperaturen.Winter BESCHR
  • Nachbarschaften Array enthält (ASC und DESC)

Zusammengesetzte Indizes

  • Stadtname ASC, Nachbarschaften ARRAY
  • Stadtname DESC, Nachbarschaften ARRAY

Indexeinträge

Diese Indexierungskonfiguration führt zu den folgenden 18 Indexeinträgen für das Dokument:

Index Indizierte Daten
Einzelfeld-Indexeinträge
Stadtname ASC Stadtname: „San Francisco“
Stadtname DESC Stadtname: „San Francisco“
Temperaturen.Sommer ASC Temperaturen.Sommer: 67
Temperaturen.Sommer DESC Temperaturen.Sommer: 67
Temperaturen.Winter ASC Temperaturen.Winter: 55
Temperaturen.Winter BESCHR Temperaturen.Winter: 55
Nachbarschafts-Array Enthält ASC Nachbarschaften: „Mission“
Nachbarschafts-Array Enthält DESC Nachbarschaften: „Mission“
Nachbarschafts-Array Enthält ASC Stadtteile: „Innenstadt“
Nachbarschafts-Array Enthält DESC Stadtteile: „Innenstadt“
Nachbarschafts-Array Enthält ASC Stadtteile: „Marina“
Nachbarschafts-Array Enthält DESC Stadtteile: „Marina“
Zusammengesetzte Indexeinträge
Stadtname ASC, Nachbarschaften ARRAY Stadtname: „San Francisco“, Nachbarschaften: „Mission“
Stadtname ASC, Nachbarschaften ARRAY Stadtname: „San Francisco“, Nachbarschaften: „Downtown“
Stadtname ASC, Nachbarschaften ARRAY Stadtname: „San Francisco“, Stadtteile: „Marina“
Stadtname DESC, Nachbarschaften ARRAY Stadtname: „San Francisco“, Nachbarschaften: „Mission“
Stadtname DESC, Nachbarschaften ARRAY Stadtname: „San Francisco“, Nachbarschaften: „Downtown“
Stadtname DESC, Nachbarschaften ARRAY Stadtname: „San Francisco“, Stadtteile: „Marina“

Indizes und Preise

Indizes tragen zu den Speicherkosten Ihrer Anwendung bei. Weitere Informationen zur Berechnung der Speichergröße für Indizes finden Sie unter Indexeintragsgröße .

Nutzen Sie die Vorteile der Indexzusammenführung

Obwohl Cloud Firestore für jede Abfrage einen Index verwendet, ist nicht unbedingt ein Index pro Abfrage erforderlich. Für Abfragen mit mehreren Gleichheitsklauseln ( == ) und optional einer orderBy Klausel kann Cloud Firestore vorhandene Indizes wiederverwenden. Cloud Firestore kann die Indizes für einfache Gleichheitsfilter zusammenführen, um die zusammengesetzten Indizes zu erstellen, die für größere Gleichheitsabfragen benötigt werden.

Sie können die Indexierungskosten senken, indem Sie Situationen identifizieren, in denen Sie von der Indexzusammenführung profitieren können. Stellen Sie sich zum Beispiel eine restaurants für eine Restaurantbewertungs-App vor:

  • Restaurants

    • Burgerthyme

      name : "Burger Thyme"
      category : "burgers"
      city : "San Francisco"
      editors_pick : true
      star_rating : 4

Stellen Sie sich nun vor, diese App verwendet Abfragen wie die folgenden. Beachten Sie, dass die App Kombinationen von Gleichheitsklauseln für category , city und editors_pick verwendet und dabei immer nach aufsteigender star_rating sortiert:

Netz
db.collection("restaurants").where("category", "==", "burgers")
                            .orderBy("star_rating")

db.collection("restaurants").where("city", "==", "San Francisco")
                            .orderBy("star_rating")

db.collection("restaurants").where("category", "==", "burgers")
                            .where("city", "==", "San Francisco")
                            .orderBy("star_rating")

db.collection("restaurants").where("category", "==", "burgers")
                            .where("city", "==" "San Francisco")
                            .where("editors_pick", "==", true )
                            .orderBy("star_rating")

Sie könnten für jede Abfrage einen Index erstellen:

Sammlung Felder indiziert Abfragebereich
Restaurants Kategorie , Kategorie star_rating“. Sammlung
Restaurants Stadt, Star_rating Sammlung
Restaurants Kategorie, -Stadt, Sterne-Bewertung Sammlung
Restaurants Kategorie, Stadt, Editors_Pick, Star_rating Sammlung

Als bessere Lösung können Sie die Anzahl der Indizes reduzieren, indem Sie die Fähigkeit von Cloud Firestore nutzen, Indizes für Gleichheitsklauseln zusammenzuführen:

Sammlung Felder indiziert Abfragebereich
Restaurants Kategorie , Kategorie star_rating“. Sammlung
Restaurants Stadt, Star_rating Sammlung
Restaurants editors_pick, star_rating Sammlung

Dieser Indexsatz ist nicht nur kleiner, er unterstützt auch eine zusätzliche Abfrage:

Netz
db.collection("restaurants").where("editors_pick", "==", true)
                            .orderBy("star_rating")

Indizierungsgrenzen

Für Indizes gelten die folgenden Grenzwerte. Alle Kontingente und Limits finden Sie unter Kontingente und Limits .

Grenze Einzelheiten
Maximale Anzahl zusammengesetzter Indizes für eine Datenbank
Maximale Anzahl von Einzelfeldkonfigurationen für eine Datenbank

Eine Konfiguration auf Feldebene kann mehrere Konfigurationen für dasselbe Feld enthalten. Beispielsweise zählen eine Ausnahme von der Einzelfeldindizierung und eine TTL-Richtlinie für dasselbe Feld als eine Feldkonfiguration für den Grenzwert.

Maximale Anzahl von Indexeinträgen für jedes Dokument

40.000

Die Anzahl der Indexeinträge ist die Summe der folgenden Werte für ein Dokument:

  • Die Anzahl der Einzelfeld-Indexeinträge
  • Die Anzahl der zusammengesetzten Indexeinträge

Um zu sehen, wie Cloud Firestore ein Dokument und eine Reihe von Indizes in Indexeinträge umwandelt, sehen Sie sich dieses Beispiel für die Anzahl der Indexeinträge an.

Maximale Anzahl von Feldern in einem zusammengesetzten Index 100
Maximale Größe eines Indexeintrags

7,5 KiB

Informationen dazu, wie Cloud Firestore die Indexeintragsgröße berechnet, finden Sie unter Indexeintragsgröße .

Maximale Summe der Größen der Indexeinträge eines Dokuments

8 MiB

Die Gesamtgröße ist die Summe der folgenden Werte für ein Dokument:

  • Die Summe der Größe der Einzelfeld-Indexeinträge eines Dokuments
  • Die Summe der Größe der zusammengesetzten Indexeinträge eines Dokuments
  • Maximale Größe eines indizierten Feldwerts

    1500 Byte

    Feldwerte über 1500 Byte werden abgeschnitten. Abfragen mit abgeschnittenen Feldwerten können inkonsistente Ergebnisse liefern.

    Best Practices für die Indizierung

    Bei den meisten Apps können Sie sich bei der Verwaltung Ihrer Indizes auf die automatische Indizierung und die Fehlermeldungslinks verlassen. In den folgenden Fällen möchten Sie jedoch möglicherweise Ausnahmen für einzelne Felder hinzufügen:

    Fall Beschreibung
    Große Stringfelder

    Wenn Sie über ein Zeichenfolgenfeld verfügen, das häufig lange Zeichenfolgenwerte enthält, die Sie nicht für Abfragen verwenden, können Sie die Speicherkosten senken, indem Sie das Feld von der Indizierung ausnehmen.

    Hohe Schreibraten für eine Sammlung, die Dokumente mit sequenziellen Werten enthält

    Wenn Sie ein Feld indizieren, das zwischen Dokumenten in einer Sammlung sequentiell zunimmt oder abnimmt, z. B. einen Zeitstempel, beträgt die maximale Schreibrate für die Sammlung 500 Schreibvorgänge pro Sekunde. Wenn Sie keine Abfragen basierend auf dem Feld mit sequenziellen Werten durchführen, können Sie das Feld von der Indizierung ausnehmen, um diese Beschränkung zu umgehen.

    In einem IoT-Anwendungsfall mit einer hohen Schreibrate könnte sich beispielsweise eine Sammlung, die Dokumente mit einem Zeitstempelfeld enthält, der Grenze von 500 Schreibvorgängen pro Sekunde nähern.

    TTL-Felder

    Wenn Sie TTL-Richtlinien (Time-to-Live) verwenden, beachten Sie, dass das TTL-Feld ein Zeitstempel sein muss. Die Indizierung von TTL-Feldern ist standardmäßig aktiviert und kann sich bei höheren Datenverkehrsraten auf die Leistung auswirken. Fügen Sie als Best Practice Einzelfeldausnahmen für Ihre TTL-Felder hinzu.

    Große Array- oder Kartenfelder

    Große Array- oder Kartenfelder können die Grenze von 40.000 Indexeinträgen pro Dokument erreichen. Wenn Sie die Abfrage nicht auf Basis eines großen Arrays oder Kartenfelds durchführen, sollten Sie es von der Indizierung ausnehmen.

    Weitere Informationen zum Beheben von Indizierungsproblemen (Index-Fanout, INVALID_ARGUMENT Fehler) finden Sie auf der Seite zur Fehlerbehebung .