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 fein strukturierte Mischung aus dunklen und hellen Farben aufweist, dann sind Schreib-/Löschvorgänge für Indexschlüssel gleichmäßig über 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 auf einem Schlüssel basiert, der streng monoton steigt oder fällt, z. B. ein Zeitstempel. Indexe für sequenzielle Schlüssel werden nicht empfohlen und können Hotspots erstellen. Beim Hotspoting kann es sein, dass Sie entsprechende erhöhte Latenzen beobachten.
Hier einige Beispiele für häufige Hotspots im Index:
Hotspotting aufgrund eines ansteigenden Zeitstempels
In diesem Beispiel kann eine Heatmap mit einer einzelnen hellen diagonalen Linie auf eine Datenbank hinweisen, die streng aufsteigende oder absteigende Indexschreib-/löschvorgänge für einen Zeitstempelfeldnamen verwendet.
Hotspotting aufgrund zunehmender Feldnamen
In diesem Beispiel kann eine Heatmap mit einer einzelnen hellen diagonalen Linie auf eine Datenbank hinweisen, die streng aufsteigende oder absteigende Indexschreib-/Löschvorgänge für ein inkrementelles Feld verwendet, z. B. automatisch generierte Rechnungsnummern.
Verwenden Sie das Key Visualizer-Tool und machen Sie sich mit der Struktur des Indexschlüssels vertraut, um das Hotspotting-Problem zu identifizieren. Ermitteln Sie, welcher Index das Problem verursacht, und schließen Sie diese Indizes mit Best Practices aus.
Struktur des Indexschlüssels
Bevor Sie die Struktur der Indexschlüssel verstehen, die im Key Visualizer-Tool angezeigt werden, sollten Sie sich mit Indexen in Firestore vertraut machen.
Der folgende Code zeigt ein Beispiel für das Indexschlüsselformat, das angezeigt wird, wenn Sie den Mauszeiger auf der Heatmap auf den betroffenen Schlüsselbereich 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 den Sammlungspfad für den Sammlungsbereich oder den Sammlungsnamen für den Sammlungsgruppenbereich handeln.
- PROPERTIES: Felder, die zum Erstellen des Index verwendet werden. Das
__name__
-Attribut wird nur für Indexdefinitionen angezeigt, die die Standardreihenfolge ändern. - VALUES: Wert der einzelnen Attribute.
- DOCUMENT: ID des Dokuments, das in einem Vorgang aktualisiert wurde.
Suchen Sie im vorherigen Beispiel nach den Feldern aus dem PROPERTIES-Wert, 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 Indizes.
Rufen Sie den Tab Zusammengesetzt oder Einzelfeld auf.
Sie können den Typ des Index anhand des Felds PROPERTIES ermitteln. Beispiele für Indexschlüssel
Klicken Sie auf Filter, wählen Sie Felder aus und geben Sie den Namen des Felds ein.
Verwenden Sie den Operator OR, um bei zusammengesetzten Indexen weitere Felder hinzuzufügen.
Nachdem Sie den Index identifiziert haben, der Probleme verursacht, können Sie die folgenden Lösungen verwenden:
Zusammengesetzter Index: Ändern Sie den Index so, dass 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 Ausnahme für ein einzelnes Feld hinzufügen.
Beispiele für Indexschlüssel-Einträge in der Heatmap
Typ | Beschreibung | Beispiel |
---|---|---|
Einzelfeldindexe mit Sammlungsumfang ASC, DESC | Firestore erstellt standardmäßig Indexe mit Sammlungsbereich. Indexeintrag für den Einzelfeldindex für das 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 mit Sammlungsumfang für Arrayfelder | Für jedes Arrayfeld in einem Dokument erstellt und verwaltet Firestore einen „array-contains“-Index des Sammlungsbereichs. Indexeintrag für Einzelfeldindexe im Modus „array-contains“, die erstellt werden, wenn dem Dokument ein Feld Country: [USA, Japan] hinzugefügt wird. Für dieses Feld werden standardmäßig auch ASC- und DESC-Indexe erstellt. Im Beispiel wird der ASC-Index für das Feld Country gezeigt. |
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users PROPERTIES:(Country: ASC) VALUES:([USA, Japan]) DOCUMENT:(projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001) |
Einzelfeldindexe für Sammlungsgruppen – ASC, DESC, ARRAY | Eine Sammlungsgruppe enthält alle Sammlungen mit derselben Sammlungs-ID. Indexeintrag für den Einzelfeldindex der Sammlungsgruppe für das Feld Timestamp in absteigender Reihenfolge. |
COLLECTION GROUP: Users PROPERTIES: (Timestamp: DESC) VALUES: (16500000000000001L) DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001 |
Einzelfeldindexe für Sammlungsgruppen – ASC, DESC, ARRAY | Indexeintrag für den Einzelfeldindex der Sammlungsgruppe für das 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 für Sammlung mit ASC-, ASC- und ARRAY-Attributen | Einträge für zusammengesetzte Indexe mit übergeordnetem Element werden erstellt, wenn verschachtelte Dokumente mit einer Indexdefinition für den Sammlungsbereich erstellt werden. Indexeintrag für zusammengesetzten Index mit dem Feld Timestamp und Name in aufsteigender Reihenfolge und Country im Modus array-contains . |
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) |
Eintrag für zusammengesetzten Index mit Umfang der Sammlungsgruppe mit ASC-Attributen | Indexeintrag für den zusammengesetzten Index für das Feld Timestamp in aufsteigender Reihenfolge und das 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 mit Sammlungsumfang mit ASC- und __name__ -Attributen |
Indexeintrag für den zusammengesetzten Index für das Feld Timestamp in aufsteigender Reihenfolge und mit __name__ -Sortierung in absteigender Reihenfolge für das Dokument Users/5000000000000001 . Sie können __name__ als letztes Feld in einer Indexdefinition verwenden, um die Standardreihenfolge 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