Firebase is back at Google I/O on May 10! Register now

Indextypen in Cloud Firestore

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Indizes sind ein wichtiger Faktor für die Leistung einer Datenbank. Ähnlich wie der Index eines Buches, der Themen in einem Buch Seitenzahlen zuordnet, ordnet ein Datenbankindex die Elemente in einer Datenbank ihren Positionen in der Datenbank zu. Wenn Sie eine Datenbankabfrage senden, kann die Datenbank einen Index verwenden, um schnell die Standorte der von Ihnen angeforderten Elemente nachzuschlagen.

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 sich noch mehr verlangsamt, wenn die Datenbank wächst. Cloud Firestore garantiert eine hohe Abfrageleistung durch die Verwendung von Indizes für alle Abfragen. Daher hängt die Abfrageleistung von der Größe der Ergebnismenge und nicht von der Anzahl der Elemente in der Datenbank ab.

Weniger Indexverwaltung, mehr App-Entwicklung

Cloud Firestore enthält Funktionen, die den Zeitaufwand für die Verwaltung von Indizes reduzieren. Die für die einfachsten 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 . Abgesehen von der Anzahl der indizierten Felder unterscheiden sich Einzelfeld- und zusammengesetzte Indizes darin, wie Sie sie verwalten.

Einzelfeld-Indizes

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 auszufü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 Einzelfeld-Indizes im Erfassungsbereich , einen im aufsteigenden Modus und einen im absteigenden Modus.

  • Für jedes Kartenfeld erstellt Cloud Firestore einen aufsteigenden Index im Erfassungsbereich und einen absteigenden Index für jedes Nicht-Array- und Nicht-Karten-Unterfeld in der Karte.

  • Für jedes Array-Feld in einem Dokument erstellt und verwaltet Cloud Firestore einen Array-Contains-Index für den Erfassungsbereich.

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

Ausnahmen für Einzelfeldindexe

Sie können ein Feld von Ihren automatischen Indizierungseinstellungen ausnehmen, indem Sie eine Einzelfeld-Indexausnahme erstellen. Eine Indizierungsausnahme setzt die datenbankweiten automatischen Indexeinstellungen außer Kraft. Eine Ausnahme kann einen Einzelfeldindex aktivieren, den Ihre automatischen Indizierungseinstellungen andernfalls deaktivieren würden, oder einen Einzelfeldindex deaktivieren, den die automatische Indexierung 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 .

Wenn Sie eine Einzelfeld-Indexausnahme für ein Kartenfeld erstellen, erben die Unterfelder der Karte diese Einstellungen. Sie können jedoch Einzelfeld-Indexausnahmen für bestimmte Unterfelder definieren. Wenn Sie eine Ausnahme für ein Unterfeld löschen, erbt das Unterfeld die Ausnahmeeinstellungen des übergeordneten Elements, falls vorhanden, oder die datenbankweiten Einstellungen, wenn keine übergeordneten Ausnahmen vorhanden sind.

Informationen zum Erstellen und Verwalten von Einzelfeld-Indexausnahmen 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 von zu indexierenden Feldern.

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 bei Einzelfeldindizes. Stattdessen unterstützt Sie Cloud Firestore beim Identifizieren und Erstellen erforderlicher zusammengesetzter Indizes, während Sie Ihre App erstellen.

Wenn Sie die obige Abfrage versuchen, ohne zuerst 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-Befehlszeilenschnittstelle 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 bestimmte Abfrageklauseln für dieses Feld. Sie können aus den folgenden Indexmodi wählen:

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

Abfragebereiche

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

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

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

Standardsortierung und das Feld __name__

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

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

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

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

Beispiel für die Indizierung

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

Betrachten Sie zur Veranschaulichung die folgenden Beispiele aus Sicht der Indexerstellung. Das folgende Snippet erstellt einige city in einer cities und legt die Felder name , state , country , capital , population und tags für jedes Dokument 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 der Annahme der standardmäßigen automatischen Indizierungseinstellungen 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 Hauptstadt Sammlung
Städte Bevölkerung Sammlung
Städte array-contains Regionen Sammlung

Von Einzelfeldindizes unterstützte Abfragen

Mit diesen automatisch erstellten Einzelfeld-Indizes 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 zusammengesetzte 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 verwendet ( < , <= , > oder >= ), oder wenn Sie nach einem anderen Feld sortieren müssen, müssen Sie einen zusammengesetzten Index für diese Abfrage erstellen.

Der array-contains Index ermöglicht es Ihnen, das Array-Feld regions abzufragen:

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)

Diese Abfragen erfordern den folgenden zusammengesetzten Index. 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 auszuführen, aber mit einer absteigenden Sortierreihenfolge, benötigen Sie einen zusätzlichen zusammengesetzten Index in absteigender Richtung für 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 auch 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-contains tags, Großbuchstaben (oder ). Sammlung

Von Sammlungsgruppenindizes unterstützte Abfragen

Stellen Sie sich zur Veranschaulichung eines Indexes mit Sammlungsgruppenbereich 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 Erfassungsbereich können Sie die Sammlung 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, Sie möchten die Sehenswürdigkeiten in allen Städten abfragen. 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 landmarks Sammlungsgruppe 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. Erfassungsgruppenabfragen, 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 konfigurierten Indexe Ihres Projekts und die Struktur eines Dokuments bestimmen die Anzahl der Indexeinträge für ein Dokument. Indexeinträge werden auf das Zähllimit für 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"]

Einzelfeld-Indizes

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

Zusammengesetzte Indizes

  • city_name ASC, Nachbarschaften ARRAY
  • city_name DESC, Nachbarschaften ARRAY

Indexeinträge

Diese Indizierungskonfiguration ergibt die folgenden 18 Indexeinträge für das Dokument:

Index Indizierte Daten
Einzelfeld-Indexeinträge
Stadtname ASC city_name: "San Francisco"
Stadtname DESC city_name: "San Francisco"
Temperaturen.Sommer ASC Temperaturen.Sommer: 67
temperaturen.sommer DESC Temperaturen.Sommer: 67
Temperaturen.Winter ASC Temperaturen.Winter: 55
Temperaturen.Winter DESC Temperaturen.Winter: 55
Neighbourhoods Array Enthält ASC Nachbarschaften: "Mission"
Nachbarschaften Array Enthält DESC Nachbarschaften: "Mission"
Neighbourhoods Array Enthält ASC Stadtteile: "Innenstadt"
Nachbarschaften Array Enthält DESC Stadtteile: "Innenstadt"
Neighbourhoods Array Enthält ASC Stadtteile: "Marina"
Nachbarschaften Array Enthält DESC Stadtteile: "Marina"
Zusammengesetzte Indexeinträge
city_name ASC, Nachbarschaften ARRAY city_name: "San Francisco", Nachbarschaften: "Mission"
city_name ASC, Nachbarschaften ARRAY city_name: "San Francisco", Nachbarschaften: "Downtown"
city_name ASC, Nachbarschaften ARRAY city_name: "San Francisco", Nachbarschaften: "Marina"
city_name DESC, Nachbarschaften ARRAY city_name: "San Francisco", Nachbarschaften: "Mission"
city_name DESC, Nachbarschaften ARRAY city_name: "San Francisco", Nachbarschaften: "Downtown"
city_name DESC, Nachbarschaften ARRAY city_name: "San Francisco", Nachbarschaften: "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 .

Vorteile der Indexzusammenführung nutzen

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 Indizierungskosten reduzieren, 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

    • Burgerthymian

      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, während sie immer nach aufsteigendem 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
Gaststätten Kategorie, star_rating Sammlung
Gaststätten Stadt, Sternebewertung Sammlung
Gaststätten Kategorie, Stadt, Sternebewertung Sammlung
Gaststätten 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
Gaststätten Kategorie, star_rating Sammlung
Gaststätten Stadt, Sternebewertung Sammlung
Gaststätten editors_pick, star_rating Sammlung

Dieser Satz von Indizes ist nicht nur kleiner, sondern 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 Beschränkungen. Alle Kontingente und Limits finden Sie unter Kontingente und Limits .

Grenze Einzelheiten
Maximale Anzahl zusammengesetzter Indizes für eine Datenbank

200

Sie können sich an den Support wenden, um eine Erhöhung dieses Limits anzufordern.

Maximale Anzahl von Einzelfeldkonfigurationen für eine Datenbank

200

Insgesamt sind 200 Konfigurationen auf Feldebene zulässig. Eine Feldkonfiguration kann mehrere Konfigurationen für dasselbe Feld enthalten. Beispielsweise zählen eine Einzelfeld-Indizierungsausnahme und eine TTL-Richtlinie für dasselbe Feld als eine Feldkonfiguration zum Limit.

Maximale Anzahl von Indexeinträgen für jedes Dokument

40.000

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

  • 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 Bytes werden abgeschnitten. Abfragen mit abgeschnittenen Feldwerten können inkonsistente Ergebnisse zurückgeben.

    Best Practices für die Indizierung

    Bei den meisten Apps können Sie sich auf die automatische Indizierung und die Links zu Fehlermeldungen verlassen, um Ihre Indizes zu verwalten. In den folgenden Fällen möchten Sie jedoch möglicherweise Einzelfeldausnahmen hinzufügen:

    Fall Beschreibung
    Große Zeichenfolgenfelder

    Wenn Sie ein Zeichenfolgenfeld haben, 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 in eine Sammlung, die Dokumente mit sequenziellen Werten enthält

    Wenn Sie ein Feld indizieren, das zwischen Dokumenten in einer Sammlung sequenziell zunimmt oder abnimmt, wie z. B. ein Zeitstempel, beträgt die maximale Schreibrate in die Sammlung 500 Schreibvorgänge pro Sekunde. Wenn Sie keine Abfrage basierend auf dem Feld mit sequenziellen Werten durchführen, können Sie das Feld von der Indizierung ausnehmen, um dieses Limit zu umgehen.

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

    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 die Leistung bei höheren Datenverkehrsraten beeinträchtigen. Fügen Sie als Best Practice Einzelfeldausnahmen für Ihre TTL-Felder hinzu.

    Große Array- oder Kartenfelder

    Große Array- oder Zuordnungsfelder können die Grenze von 40.000 Indexeinträgen pro Dokument erreichen. Wenn Sie nicht auf der Grundlage eines großen Arrays oder Zuordnungsfelds abfragen, sollten Sie es von der Indizierung ausnehmen.