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
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
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
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:
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.
Klicken Sie im Navigationsmenü auf Indexe.
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.
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
- Einstieg in Key Visualizer
- Wie Heatmaps im Detail untersucht werden
- Welche Messwerte Sie in einer Heatmap abrufen können