Ich bin neu in DynamoDB. Ich möchte eine Tabelle erstellen, die DeviceID als Hash-Schlüssel, Timestamp als Bereichsschlüssel und einige Daten verwendet.
{ DeviceID: 123, Timestamp: "2016-11-11T17:21:07.5272333Z", X: 12, Y: 35 }
In SQL können wir den Datum / Uhrzeit-Typ für den Zeitstempel verwenden, in DynamoDB gibt es jedoch keinen.
In welches Zeitstempelformat sollte ich für den ausgewählten Datentyp schreiben? ISO-Format (z. B. 2016-11-11T17: 21: 07.5272333Z) oder Epochenzeit (z. B. 1478943038816)?
Ich muss die Tabelle über einen bestimmten Zeitraum durchsuchen, z. B.: 01.01.2015 10:00:00 Uhr bis 31.12.2016 23:00:00 Uhr
Antworten:
Der String-Datentyp sollte für Datum oder Zeitstempel verwendet werden.
DynamoDB-Datentyp für Datum oder Zeitstempel
Ja, die Bereichsabfragen werden unterstützt, wenn das Datum als Zeichenfolge gespeichert wird. Das ZWISCHEN kann in FilterExpresssion verwendet werden. Ich habe die Elemente im Ergebnis mit den folgenden Filterausdrücken erhalten.
FilterExpression ohne Zeit: -
FilterExpression mit der Zeit: -
Datenbankwerte: -
Format 1 - mit Zeitzone:
Format 2 - ohne Zeitzone: -
quelle
Der Datentyp hängt von Ihren Anforderungen ab.
Sie können String im ISO-Format oder Number im Epochenformat verwenden.
Der Vorteil des ISO-Formats (String) liegt in der menschlichen Lesbarkeit. DynamoDB unterstützt jedoch Time To Live (TTL) für dieses Format nicht. Alle Filter funktionieren wie 'zwischen' und 'Bereich', wie durch Begriffsquest erklärt.
Der Vorteil der Verwendung des Epochenformats (Number) besteht darin, dass Sie die TTL-Funktion und alle Filter verwenden können.
TLDR;
Epochenformat (Zahlentyp) - Kann das Time To Live-
ISO-Format (String-Typ) verwenden. - Time To Live kann nicht verwendet werden, ist jedoch besser lesbar
quelle
Der Datentyp Number ODER der Datentyp String
kann für Datum oder Zeitstempel verwendet werden - nicht nur für Zeichenfolge, da die akzeptierte Antwort auf diese Frage fälschlicherweise hervorgehoben wird, während die Nummer ignoriert wird.
DynamoDB-Datentyp für Datum oder Zeitstempel
quelle
Damit ich beim Senden einer Abfrageanforderung Ergebnisse herausfiltern kann, habe ich das Epochenformat für DateTime verwendet. Es ist effizienter als die Verwendung von Zeichenfolgen.
Stellen Sie sich diese Szenarien vor: Die letzten 31 Tage, die letzten 24 Stunden, ... wieder ist alles mit dem Zeichenfolgenformat möglich, da es auch den Operator begin_with hat ( siehe drittes Beispiel im folgenden Link im AWS-Dokument ), aber numerische Werte sind wesentlich effizienter der Leistung beim Sortieren (Vergleichen) und Berechnen.
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html#Query.KeyConditionExpressions
Es ist einfach, Datum und Uhrzeit in das Epochenformat zu konvertieren
Javascript:
C #
Python
quelle