web-dev-qa-db-fra.com

Quel type de données doit être utilisé pour l'horodatage dans DynamoDB?

Je suis nouveau sur DynamoDB. Je souhaite créer une table qui utilise DeviceID comme clé de hachage, Timestamp comme clé de plage et des données.

{ DeviceID: 123, Timestamp: "2016-11-11T17:21:07.5272333Z", X: 12, Y: 35 }

En SQL, nous pouvons utiliser le type datetime pour Timestamp, mais il n'y en a pas dans DynamoDB. 

  1. Quel type de données devrais-je utiliser? Chaîne? Nombre?
     enter image description here

  2. Pour le type de données choisi, quel type de format d'horodatage dois-je écrire? Format ISO (par exemple: 2016-11-11T17: 21: 07.5272333Z) ou heure de l'époque (par exemple: 1478943038816)? 

  3. Je dois effectuer une recherche dans la table sur une plage de temps, par exemple: le 01/01/2015 de 10h00 à 31/12/2016 à 23h00.

46
Dennis

Le type de données String doit être utilisé pour la date ou l'horodatage.

Vous pouvez utiliser le type de données String pour représenter une date ou un horodatage . Une façon de faire est d'utiliser des chaînes ISO 8601, comme indiqué dans celles-ci exemples:

2016-02-15 

2015-12-21T17: 42: 34Z

20150311T122706Z

Type de données DynamoDB pour Date ou Horodatage

Oui, les requêtes de plage sont prises en charge lorsque la date est stockée sous forme de chaîne. Le ENTRE peut être utilisé sur FilterExpresssion. J'ai obtenu les éléments du résultat en utilisant les expressions de filtre ci-dessous.

FilterExpression sans le temps: -

FilterExpression : 'createdate between :val1 and :val2',
ExpressionAttributeValues : {
        ':hkey' : year_val,
        ':rkey' : title,
        ":val1" : "2010-01-01",
        ":val2" : "2010-12-31"
    }

FilterExpression avec le temps: -

FilterExpression : 'createdate between :val1 and :val2',
    ExpressionAttributeValues : {
        ':hkey' : year_val,
        ':rkey' : title,
        ":val1" : "2010-01-01T00:00:00",
        ":val2" : "2010-12-31T00:00:00"
    }

Valeurs de la base de données: -

Format 1 - avec fuseau horaire:

{"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 - sans fuseau horaire: -

{"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

Le type de données dépend de vos besoins.

Vous pouvez utiliser String en utilisant le format ISO ou Number en utilisant le format Epoch.

L'avantage du format ISO (String) est la lisibilité humaine. Toutefois, DynamoDB ne prend pas en charge la durée de vie (TTL) pour ce format. Tous les filtres fonctionnent comme "entre" et "intervalle" comme expliqué par notionquest.

Durée de vie (TTL) pour DynamoDB vous permet de définir la date d'expiration des éléments d'une table afin qu'ils puissent être automatiquement supprimés de la base de données.

L’utilisation du format Epoch (Number) présente l’avantage de pouvoir utiliser la fonction TTL et tous les filtres. 

TLDR;

Format d'époque (type de numéro) - Peut utiliser Time To Live
Format ISO (type de chaîne) - Impossible d'utiliser Time To Live, mais il est plus lisible par l'homme

0
TheKnightCoder