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 den Datastore-Modus 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 ein Zeitstempelattribut strikt zunehmende oder abnehmende Schreib-/Löschvorgänge für Indexe verwendet.

Heißlaufen aufgrund zunehmender Attributnamen

Heatmap, die Heißlaufen aufgrund einer steigenden Property zeigt

In diesem Beispiel kann eine Heatmap mit einer einzelnen hellen diagonalen Linie auf eine Datenbank hinweisen, die für ein inkrementelles Attribut wie automatisch generierte Rechnungsnummern strikt zunehmende oder abnehmende 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 mit den Indexen im Datastore-Modus vertraut machen.

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.

NAMESPACE: NS KIND: Users
PROPERTIES: (Timestamp: DESC, Name: DESC)
ANCESTOR: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),`UserList`,1)
VALUES: (16500000000000001,'Alice')
ENTITY:KEY(PROJECT('PROJECT_ID'),NAMESPACE(''),`UserList`,1,`User`,5000000000000001)

Wobei:

  • NAMESPACE: Namespace der Entität.
  • KIND: Art der Entität, die die Entitäten kategorisiert.
  • PROPERTIES: Properties, die sich auf die Entität beziehen. Das Sortierungsattribut __key__ wird nur für Indexdefinitionen angezeigt, die die Standardsortierung ändern.
  • ANCESTOR: Optionaler Ancestor-Pfad zum Ermitteln der Entität in der Datenbankhierarchie.
  • WERTE: Wert jeder Eigenschaft
  • ENTITY: ID der Entität, die in einem Vorgang aktualisiert wurde

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

So finden Sie den Index:

  1. Rufen Sie in der Google Cloud Console die Seite Indexe im Datastore-Modus auf.

    Zu Indexen im Datastore-Modus

    Analysieren Sie das Feld PROPERTIES, um den Indextyp zu ermitteln. Weitere Informationen finden Sie unter Beispiele für Indexschlüssel.

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

    Verwenden Sie den Operator OR, um weitere Attribute für zusammengesetzte Indexe hinzuzufügen.

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

  • Integrierter Index: Schließen Sie das Attribut aus, damit der Index keine Indexeinträge für dieses Attribut verwaltet. Weitere Informationen finden Sie unter Ausgeschlossene Eigenschaften.
  • Zusammengesetzter Index: Ändern Sie entweder den Index in der Datei index.yaml, 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. Weitere Informationen finden Sie unter Über index.yaml.

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

Typ Beschreibung Beispiel
Integrierter Indexeintrag Indexeintrag für den einzelnen Attributindex des Attributs Timestamp, in absteigender Reihenfolge für den Namespace NS. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),Nutzer, 5000000000000001)
Integrierter Indexeintrag Indexeintrag für den einzelnen Property-Index im Standard-Namespace. NAMESPACE: ' '
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),Nutzer, 5000000000000001)
Zusammengesetzter Indexeintrag Indexeintrag für den zusammengesetzten Index für die Attribute Timestamp und Name in absteigender Reihenfolge ohne aktiviertes Ancestor. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Nutzer,5000000000000001)
Zusammengesetzter Indexeintrag mit Ancestor Indexeintrag für den zusammengesetzten Index für das Attribut Timestamp in absteigender Reihenfolge und das Attribut Name in absteigender Reihenfolge mit aktiviertem Ancestor. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: ASC)
ANCESTOR: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Nutzerliste,1,Nutzer,5000000000000001
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Nutzerliste,1,Nutzer,5000000000000001)
Zusammengesetzter Indexeintrag mit __key__ Indexeintrag für den zusammengesetzten Index für das Attribut Timestamp in aufsteigender Reihenfolge und für __key__ in absteigender Reihenfolge ohne aktiviertes Ancestor. Sie können __key__ als letztes Attribut in einer Indexdefinition verwenden, um die Standardsortierung der Ergebnisse zu ändern. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: ASC, __key__ DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Nutzerliste,1,Nutzer,5000000000000001)

Nächste Schritte