Optimieren des Datenzugriffs in Amazon Timestream - Amazon Timestream

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Optimieren des Datenzugriffs in Amazon Timestream

Sie können die Datenzugriffsmuster in Amazon Timestream mithilfe des Timestream-Partitionierungsschemas oder der Datenorganisationstechniken optimieren.

Timestream-Partitionierungsschema

Amazon Timestream verwendet ein hoch skalierbares Partitionierungsschema, bei dem jede Timestream-Tabelle Hunderte, Tausende oder sogar Millionen unabhängiger Partitionen haben kann. Ein hochverfügbarer Dienst zur Partitionsverfolgung und Indizierung verwaltet die Partitionierung, minimiert die Auswirkungen von Ausfällen und macht das System widerstandsfähiger.

Timestream-Partitionierungsschema

Organisation der Daten

Timestream speichert jeden Datenpunkt, den es aufnimmt, in einer einzigen Partition. Wenn Sie Daten in eine Timestream-Tabelle aufnehmen, erstellt Timestream automatisch Partitionen auf der Grundlage der Zeitstempel, des Partitionsschlüssels und anderer Kontextattribute in den Daten. Neben der zeitlichen Partitionierung der Daten (zeitliche Partitionierung) partitioniert Timestream die Daten auch auf der Grundlage des ausgewählten Partitionierungsschlüssels und anderer Dimensionen (räumliche Partitionierung). Dieser Ansatz ist darauf ausgelegt, den Schreibverkehr zu verteilen und eine effektive Bereinigung von Daten für Abfragen zu ermöglichen.

Die Funktion für Abfrageerkenntnisse bietet wertvolle Einblicke in die Effizienz der Bereinigung von Abfragen, einschließlich der räumlichen Abdeckung von Abfragen und der zeitlichen Abdeckung von Abfragen.

QuerySpatialCoverage

Die QuerySpatialCoverageMetrik bietet Einblicke in die räumliche Abdeckung der ausgeführten Abfrage und in die Tabelle mit der ineffizientesten räumlichen Bereinigung. Diese Informationen können Ihnen helfen, Bereiche zu identifizieren, in denen die Partitionierungsstrategie verbessert werden kann, um die räumliche Kürzung zu verbessern. Der Wert für die QuerySpatialCoverage Metrik liegt zwischen 0 und 1. Je niedriger der Wert der Metrik ist, desto optimaler ist die Bereinigung der Abfrage auf der räumlichen Achse. Ein Wert von 0,1 gibt beispielsweise an, dass die Abfrage 10% der räumlichen Achse scannt. Ein Wert von 1 gibt an, dass die Abfrage 100% der räumlichen Achse scannt.

Beispiel Verwenden von Abfrageerkenntnissen zur Analyse der räumlichen Abdeckung einer Abfrage

Angenommen, Sie haben eine Timestream-Datenbank, die Wetterdaten speichert. Gehen Sie davon aus, dass die Temperatur stündlich von Wetterstationen in verschiedenen Bundesstaaten der USA aufgezeichnet wird. Stellen Sie sich vor, Sie wählen State als benutzerdefinierten Partitionsschlüssel (CDPK) die Partitionierung der Daten nach Status.

Angenommen, Sie führen eine Abfrage aus, um die Durchschnittstemperatur aller Wetterstationen in Kalifornien zwischen 14 Uhr und 16 Uhr an einem bestimmten Tag abzurufen. Das folgende Beispiel zeigt die Abfrage für dieses Szenario.

SELECT AVG(temperature) FROM "weather_data"."hourly_weather" WHERE time >= '2024-10-01 14:00:00' AND time < '2024-10-01 16:00:00' AND state = 'CA';

Mithilfe der Funktion Query Insights können Sie die räumliche Abdeckung der Abfrage analysieren. Stellen Sie sich vor, dass die QuerySpatialCoverage Metrik einen Wert von 0,02 zurückgibt. Das bedeutet, dass die Abfrage nur 2% der räumlichen Achse gescannt hat, was effizient ist. In diesem Fall war die Abfrage in der Lage, den räumlichen Bereich effektiv zu kürzen, indem nur Daten aus Kalifornien abgerufen und Daten aus anderen Bundesstaaten ignoriert wurden.

Im Gegenteil, wenn die QuerySpatialCoverage Metrik einen Wert von 0,8 zurückgibt, würde dies bedeuten, dass die Abfrage 80% der räumlichen Achse gescannt hat, was weniger effizient ist. Dies könnte darauf hindeuten, dass die Partitionierungsstrategie verfeinert werden muss, um die räumliche Bereinigung zu verbessern. Sie können den Partitionsschlüssel beispielsweise als Stadt oder Region statt als Bundesland auswählen. Durch die Analyse der QuerySpatialCoverage Metrik können Sie Möglichkeiten zur Optimierung Ihrer Partitionierungsstrategie und zur Verbesserung der Leistung Ihrer Abfragen identifizieren.

Die folgende Abbildung zeigt eine schlechte räumliche Bereinigung.

Ergebnis der QuerySpatialCoverage Metrik, die eine schlechte räumliche Bereinigung zeigt.

Um die Effizienz beim räumlichen Beschneiden zu verbessern, können Sie eine oder beide der folgenden Aktionen ausführen:

  • Fügen Sie measure_name den Standard-Partitionierungsschlüssel hinzu, oder verwenden Sie die CDPK Prädikate in Ihrer Abfrage.

  • Wenn Sie die im vorherigen Punkt genannten Attribute bereits hinzugefügt haben, entfernen Sie Funktionen rund um diese Attribute oder Klauseln, z. B. LIKE

QueryTemporalCoverage

Die QueryTemporalCoverage Metrik bietet Einblicke in den Zeitbereich, der von der ausgeführten Abfrage gescannt wurde, einschließlich der Tabelle mit dem größten gescannten Zeitraum. Der Wert für die QueryTemporalCoverage Metrik ist der Zeitbereich, der in Nanosekunden dargestellt wird. Je niedriger der Wert dieser Metrik ist, desto optimaler ist die Abfragebereinigung im Zeitbereich. Beispielsweise ist eine Abfrage, die Daten der letzten Minuten scannt, leistungsfähiger als eine Abfrage, die den gesamten Zeitraum der Tabelle scannt.

Beispiel

Angenommen, Sie haben eine Timestream-Datenbank, in der IoT-Sensordaten gespeichert werden, wobei jede Minute Messungen von Geräten in einer Produktionsstätte durchgeführt werden. Gehen Sie davon aus, dass Sie Ihre Daten nach partitioniert haben. device_ID

Angenommen, Sie führen eine Abfrage aus, um den durchschnittlichen Sensorwert für ein bestimmtes Gerät in den letzten 30 Minuten abzurufen. Das folgende Beispiel zeigt die Abfrage für dieses Szenario.

SELECT AVG(sensor_reading) FROM "sensor_data"."factory_1" WHERE device_id = 'DEV_123' AND time >= NOW() - INTERVAL 30 MINUTE and time < NOW();

Mithilfe der Funktion für Abfrageerkenntnisse können Sie den von der Abfrage gescannten Zeitbereich analysieren. Stellen Sie sich vor, die QueryTemporalCoverage Metrik gibt einen Wert von 1800000000000 Nanosekunden (30 Minuten) zurück. Das bedeutet, dass die Abfrage nur die Daten der letzten 30 Minuten gescannt hat, was ein relativ enger Zeitbereich ist. Dies ist ein gutes Zeichen, da es darauf hinweist, dass die Abfrage die zeitliche Partitionierung effektiv bereinigen konnte und nur die angeforderten Daten abgerufen hat.

Im Gegenteil, wenn die QueryTemporalCoverage Metrik einen Wert von 1 Jahr in Nanosekunden zurückgibt, bedeutet dies, dass die Abfrage einen Zeitraum von einem Jahr in der Tabelle gescannt hat, was weniger effizient ist. Dies könnte darauf hindeuten, dass die Abfrage nicht für die zeitliche Bereinigung optimiert ist, und Sie könnten sie verbessern, indem Sie Zeitfilter hinzufügen.

Die folgende Abbildung zeigt ein schlechtes zeitliches Beschneiden.

Ergebnis der QueryTemporalCoverage Metrik, die ein schlechtes zeitliches Beschneiden zeigt.

Um den zeitlichen Schnitt zu verbessern, empfehlen wir Ihnen, einen oder alle der folgenden Schritte durchzuführen:

  • Fügen Sie der Abfrage die fehlenden Zeitprädikate hinzu und stellen Sie sicher, dass die Zeitprädikate das gewünschte Zeitfenster bereinigen.

  • Entfernen Sie Funktionen wie etwa MAX() Zeitprädikate.

  • Fügen Sie allen Unterabfragen Zeitprädikate hinzu. Dies ist wichtig, wenn Ihre Unterabfragen große Tabellen verknüpfen oder komplexe Operationen ausführen.