web-dev-qa-db-de.com

Welcher Datentyp sollte für den Zeitstempel in DynamoDB verwendet werden?

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. 

  1. Welchen Datentyp sollte ich verwenden? String Nummer?
     enter image description here

  2. 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)? 

  3. 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

46
Dennis

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."}}}}}
39
notionquest

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

0
TheKnightCoder