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 Datetime-Typ für Timestamp verwenden, in DynamoDB 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 durch eine bestimmte Zeitspanne durchsuchen, z. B .: 01.01.2015 10:00 Uhr bis 31.12.2016, 11:00:00 Uhr
Der Datentyp String sollte für Datum oder Zeitstempel verwendet werden.
Sie können den String-Datentyp verwenden, um ein Datum oder einen Zeitstempel darzustellen. Eine Möglichkeit, dies zu tun, ist die Verwendung von ISO 8601-Zeichenketten, wie in diesen Beispiele:
2016-02-15
2015-12-21T17: 42: 34Z
20150311T122706Z
DynamoDB-Datentyp für Datum oder Zeitstempel
Ja, die Bereichsabfragen werden unterstützt, wenn das Datum als Zeichenfolge gespeichert wird. Das ZWISCHEN kann für FilterExpresssion verwendet werden. Ich habe die Elemente im Ergebnis mit den folgenden Filterausdrücken erhalten.
FilterExpression ohne Zeit: -
FilterExpression : 'createdate between :val1 and :val2',
ExpressionAttributeValues : {
':hkey' : year_val,
':rkey' : title,
":val1" : "2010-01-01",
":val2" : "2010-12-31"
}
FilterExpression mit Zeit: -
FilterExpression : 'createdate between :val1 and :val2',
ExpressionAttributeValues : {
':hkey' : year_val,
':rkey' : title,
":val1" : "2010-01-01T00:00:00",
":val2" : "2010-12-31T00:00:00"
}
Datenbankwerte: -
Format 1 - mit Zeitzone:
{"Item":{"createdate":{"S":"2010-12-21T17:42:34+00:00"},"title":{"S":"The Big New Movie 2010"},"yearkey":{"N":"2010"},"info":{"M":{"rating":{"N":"0"},"plot":{"S":"Nothing happens at all."}}}}}
Format 2 - ohne Zeitzone: -
{"Item":{"createdate":{"S":"2010-12-21T17:42:34Z"},"title":{"S":"The Big New Movie 2010"},"yearkey":{"N":"2010"},"info":{"M":{"rating":{"N":"0"},"plot":{"S":"Nothing happens at all."}}}}}
Datentyp hängt von Ihren Anforderungen ab.
Sie können String im ISO-Format oder Number im Epoch-Format verwenden.
Der Vorteil des ISO-Formats (String) ist die menschliche Lesbarkeit. DynamoDB unterstützt jedoch keine Time To Live (TTL) für dieses Format. Alle Filter funktionieren wie 'Zwischen' und 'Bereich', wie durch Notensuche erklärt.
Mit Time To Live (TTL) für DynamoDB können Sie festlegen, wann Elemente in einer Tabelle ablaufen, damit sie automatisch aus der Datenbank gelöscht werden können.
Der Vorteil der Verwendung des Epoch-Formats (Number) besteht darin, dass Sie die Funktion TTL und alle Filter verwenden können.
TLDR;
Epochenformat (Zahlentyp) - Kann Time To Live verwenden
ISO-Format (String-Typ) - Time To Live kann nicht verwendet werden, ist jedoch für Menschen lesbarer