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 | __name__ | Zustand, Sammlung |
Städte | __name__ | Land, Bevölkerung, 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:
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:
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: |
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. |