Heatmap-Muster für Indexschlüssel

Diese Seite zeigt Beispiele für Muster, die in einer Heatmap von Key Visualizer angezeigt werden können. Diese Muster können Ihnen bei der Behebung bestimmter Leistungsprobleme helfen.

Gleichmäßig verteilte Nutzung

Heatmap, die gleichmäßig verteilte Lese- und Schreibvorgänge zeigt

Wenn eine Heatmap eine feine Mischung aus dunklen und hellen Farben zeigt, sind Schreib-/Löschvorgänge für Indexschlüssel gleichmäßig auf die Datenbank verteilt. Diese Heatmap stellt wahrscheinlich ein effektives Nutzungsmuster für Firestore dar.

Indexe für sequenzielle Schlüssel

Eine Heatmap mit einer einzelnen hellen diagonalen Linie kann auf einen Index hinweisen, der sich auf einem Schlüssel befindet, der stark zu- oder abnimmt, z. B. ein Zeitstempel. Indexe für sequenzielle Schlüssel werden nicht empfohlen und können Hotspots erzeugen. Beim Heißlaufen können entsprechende erhöhte Latenzen auftreten.

Hier einige Beispiele für häufige Hotspots im Index:

Heißlaufen aufgrund eines ansteigenden Zeitstempels

Heatmap, die Heißlaufen aufgrund eines zunehmenden Zeitstempels zeigt

In diesem Beispiel kann eine Heatmap mit einer einzelnen hellen diagonalen Linie auf eine Datenbank hinweisen, die für einen Zeitstempelfeldnamen strikt zunehmende oder abnehmende Indexschreib-/Löschvorgänge verwendet.

Heißlaufen aufgrund zunehmender Feldnamen

Heatmap, die Heißlaufen aufgrund eines zunehmenden Felds zeigt

In diesem Beispiel kann eine Heatmap mit einer einzelnen hellen diagonalen Linie auf eine Datenbank hinweisen, die für ein inkrementelles Feld wie automatisch generierte Rechnungsnummern strenge Schreib-/Löschvorgänge für Indexe verwendet.

Verwenden Sie das Key Visualizer-Tool und machen Sie sich mit der Indexschlüsselstruktur vertraut, um zu ermitteln, welcher Index das Problem verursacht, und schließen Sie diese Indexe gemäß den Best Practices aus.

Indexschlüsselstruktur

Bevor Sie sich mit der Struktur von Indexschlüsseln im Key Visualizer-Tool vertraut machen, sollten Sie sich über Indexe in Firestore informieren.

Der folgende Code zeigt ein Beispielformat für Indexschlüssel, das Sie sehen, wenn Sie den Mauszeiger auf den betroffenen Schlüsselbereich auf der Heatmap bewegen.

COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
  PROPERTIES: (Timestamp: DESC)
  VALUES: (16500000000000001)
  DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001

Wobei:

  • COLLECTION: Speicherort der Sammlung in Ihrer Datenbank. Je nach Bereich kann es sich um einen Sammlungspfad für den Sammlungsbereich oder um den Sammlungsnamen für den Sammlungsgruppenbereich handeln.
  • PROPERTIES: Felder, die zum Erstellen des Index verwendet werden. Das Sortierattribut __name__ wird nur für Indexdefinitionen angezeigt, die die Standardsortierung ändern.
  • WERTE: Wert jeder Eigenschaft
  • DOCUMENT: ID des Dokuments, das in einem Vorgang aktualisiert wurde.

Ermitteln Sie im vorherigen Beispiel die Felder aus dem Wert PROPERTIES, um den betroffenen Index zu finden.

So finden Sie den Index:

  1. Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.

    Zur Seite „Datenbanken“

  2. Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.

  3. Klicken Sie im Navigationsmenü auf Indexe.

  4. Wechseln Sie zum Tab Zusammengesetzt oder Einzelfeld.

    Sie können den Indextyp ermitteln, indem Sie das Feld PROPERTIES analysieren. Weitere Informationen finden Sie in den Beispielen für Indexschlüssel.

  5. Klicken Sie auf Filter, wählen Sie Felder aus und geben Sie den Namen des Felds ein.

    Mit dem Operator OR können Sie für zusammengesetzte Indexe weitere Felder hinzufügen.

Nachdem Sie den Index identifiziert haben, der Probleme verursacht, können Sie die folgenden Lösungen verwenden:

  • Zusammengesetzter Index: Ändern Sie entweder den Index, damit das Feld, dessen Wert monoton steigt oder fällt, nicht als erstes Feld für die Indexierung ausgewählt wird, oder löschen Sie den Index.

  • Einzelfeldindex: Fügen Sie eine Ausnahme für das Feld und die Sortierreihenfolge hinzu, die Sie ausnehmen möchten. Weitere Informationen finden Sie unter Einzelfeldausnahme hinzufügen.

Beispiele für Indexschlüsseleinträge auf der Heatmap

Typ Beschreibung Beispiel
Einzelfeld-Indexe des Sammlungsbereichs ASC, DESC Firestore erstellt standardmäßig Indexe mit Sammlungsbereich.

Indexeintrag für den Einzelfeldindex im Feld Timestamp, in absteigender Reihenfolge für das Dokument Users/5000000000000001.
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: DESC)
VALUES: (16500000000000001)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
Einzelfeldindexe des Sammlungsbereichs für Arrayfelder Für jedes Arrayfeld in einem Dokument erstellt und verwaltet Firestore einen „array-contains“-Sammlungsbereichsindex.

Indexeintrag für Einzelfeldindexe im Array-Modus, die erstellt werden, wenn dem Dokument das Feld Country: [USA, Japan] hinzugefügt wird. Für dieses Feld werden standardmäßig auch die Indexe ASC,DESC erstellt. Das Beispiel zeigt den ASC-Index für das Feld Country.
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES:(Country: ASC)
VALUES:([USA, Japan]) DOCUMENT:(projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
Sammlungsgruppe: Einzelfeldindexe ASC, DESC, ARRAY Eine Sammlungsgruppe enthält alle Sammlungen mit derselben Sammlungs-ID.
Indexeintrag für den Einzelfeldindex der Sammlungsgruppe im Feld Timestamp, in absteigender Reihenfolge.
COLLECTION GROUP: Users
PROPERTIES: (Timestamp: DESC)
VALUES: (16500000000000001L)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
Sammlungsgruppe: Einzelfeldindexe ASC, DESC, ARRAY Indexeintrag für den Einzelfeld-Index der Sammlungsgruppe im Feld Country im Modus array-contains COLLECTION GROUP: Users PROPERTIES: (Country: ARRAY ASC) VALUES: (USA) DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
Zusammengesetzter Indexeintrag aus Sammlung mit ASC-, ASC- und ARRAY-Attributen Zusammengesetzte Indexeinträge mit übergeordneten Elementen werden erstellt, wenn verschachtelte Dokumente mit der Indexdefinition des Sammlungsbereichs erstellt werden.

Indexeintrag für zusammengesetzten Index mit den Feldern Timestamp und Name in aufsteigender Reihenfolge sowie Country im array-contains-Modus.
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: ASC, Name: ASC,Country: ARRAY)
VALUES: (16500000000000001L, 'Alice', 'USA')
DOCUMENT: (projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
Zusammengesetzter Indexeintrag auf Sammlungsgruppenebene mit ASC- und ASC-Attributen Indexeintrag für den zusammengesetzten Index im Feld Timestamp in aufsteigender Reihenfolge und im Feld Name in aufsteigender Reihenfolge COLLECTION GROUP: Users
PROPERTIES: (Timestamp: ASC, Name: ASC)
VALUES: (16500000000000001L, 'Alice')
DOCUMENT: (projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
Zusammengesetzter Indexeintrag in Sammlungsbereich mit ASC- und __name__-Attributen Indexeintrag für den zusammengesetzten Index im Feld Timestamp in aufsteigender Reihenfolge und mit __name__-Sortierung in absteigender Reihenfolge für das Users/5000000000000001-Dokument. Sie können __name__ als letztes Feld in einer Indexdefinition verwenden, um die Standardsortierung der Ergebnisse zu ändern. COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: ASC, __name__ DESC)
VALUES: (16500000000000001)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001

Nächste Schritte