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 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 den Datastore-Modus 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

Heatmap, die Hotspotting aufgrund eines ansteigenden Zeitstempels zeigt

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 eine Zeitstempel-Property verwendet.

Hotspotting aufgrund zunehmender Property-Namen

Heatmap, die Hotspotting aufgrund einer zunehmenden Property zeigt

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 eine inkrementelle Eigenschaft wie automatisch generierte Rechnungsnummern verwendet.

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 im Datastore-Modus 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.

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 Einheit.
  • KIND: Art der Entität, mit der die Entitäten kategorisiert werden.
  • PROPERTIES: Attribute, die sich auf die Entität beziehen. Das Attribut __key__ wird nur für Indexdefinitionen angezeigt, die die Standardreihenfolge ändern.
  • ANCESTOR: Optionaler Ancestor-Pfad zur Entität innerhalb der Datenbankhierarchie.
  • VALUES: Wert der einzelnen Attribute.
  • ENTITY: ID der Entität, die in einem Vorgang aktualisiert wurde.

Ermitteln Sie anhand des PROPERTIES-Werts aus dem vorherigen Beispiel den betroffenen Index.

So finden Sie den Index:

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

    Zu Indexen im Datastore-Modus

    Sie können den Typ des Index anhand des Felds PROPERTIES ermitteln. Weitere Informationen finden Sie in den Beispielen 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 bei zusammengesetzten Indexen weitere Attribute 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 enthält. Weitere Informationen finden Sie unter Ausgeschlossene Attribute.
  • Zusammengesetzter Index: Ändern Sie den Index in der Datei index.yaml 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. Weitere Informationen finden Sie unter index.yaml.

Beispiele für Indexschlüssel-Einträge in der Heatmap

Typ Beschreibung Beispiel
Integrierter Indexeintrag Indexeintrag für den Index für einzelne Attribute für das Attribut 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 Index des einzelnen Attributs im Standard-Namespace. NAMESPACE: ' '
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),Nutzer, 5000000000000001)
Eintrag eines zusammengesetzten Index Indexeintrag für den zusammengesetzten Index für das Attribut Timestamp und das Attribut Name in absteigender Reihenfolge ohne aktivierte Vorfahren. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Nutzer,5000000000000001)
Eintrag eines zusammengesetzten Index mit übergeordnetem Element Indexeintrag für den zusammengesetzten Index für das Attribut Timestamp in absteigender Reihenfolge und das Attribut Name in absteigender Reihenfolge mit aktivierter übergeordneter Entität. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: ASC)
ANCESTOR: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),UserList,1,User,5000000000000001
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),UserList,1,User,5000000000000001)
Eintrag eines zusammengesetzten Indexes mit __key__ Indexeintrag für den zusammengesetzten Index für das Attribut Timestamp in aufsteigender Reihenfolge und das Attribut __key__ in absteigender Reihenfolge ohne aktivierten Vorfahren. Sie können __key__ als letzte Eigenschaft in einer Indexdefinition verwenden, um die Standardreihenfolge der Ergebnisse zu ändern. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: ASC, __key__ DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),UserList,1,User,5000000000000001)

Nächste Schritte