Je suis nouveau sur DynamoDB. Je souhaite créer une table qui utilise DeviceID comme clé de hachage, Timestamp comme clé de plage et certaines 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 dans DynamoDB il n'y en a pas.
Pour le type de données choisi, dans quel type de format d'horodatage dois-je écrire? Format ISO (par exemple: 2016-11-11T17: 21: 07.5272333Z) ou heure d'époque (par exemple: 1478943038816)?
J'ai besoin de rechercher dans le tableau à travers une plage horaire, par exemple: 1/1/2015 10h00 au 31/12/2016 23h00
Réponses:
Le type de données String doit être utilisé pour Date ou Timestamp.
Type de données DynamoDB pour la date ou l'horodatage
Oui, les requêtes Range sont prises en charge lorsque la date est stockée sous forme de chaîne. L' ENTRE peut être utilisé sur FilterExpresssion. J'ai les éléments dans le résultat en utilisant les expressions de filtre ci-dessous.
FilterExpression sans temps: -
FilterExpression avec le temps: -
Valeurs de la base de données: -
Format 1 - avec fuseau horaire:
Format 2 - sans fuseau horaire: -
la source
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 d'époque.
L'avantage du format ISO (String) est la lisibilité humaine, mais DynamoDB ne prend pas en charge Time To Live (TTL) pour ce format. Tous les filtres fonctionnent tels que «entre» et «plage» comme l'explique notionquest.
L'avantage d'utiliser le format d'époque (nombre) est que vous pouvez utiliser la fonction TTL et tous les filtres.
TLDR;
Format d'époque (type numérique) - Peut utiliser le
format ISO Time To Live (type chaîne) - Ne peut pas utiliser Time To Live mais est plus lisible par l'homme
la source
Le type de données Number OU le type de données String
peut être utilisé pour la date ou l'horodatage - pas seulement la chaîne car la réponse acceptée à cette question se distingue par erreur tout en ignorant le nombre.
Type de données DynamoDB pour la date ou l'horodatage
la source
pour que je puisse filtrer les résultats lors de l'envoi d'une requête de requête, j'ai utilisé le format d'époque pour DateTime, c'est plus efficace que d'utiliser une chaîne.
imaginez ces scénarios: les 31 derniers jours, les dernières 24 heures, ... encore une fois, tout est possible en utilisant le format de chaîne car il a également l' opérateur begin_with ( veuillez vérifier le 3ème exemple dans le lien ci-dessous sur le document AWS ) mais les valeurs numériques sont beaucoup plus efficaces en termes des performances lors du tri (comparaison) et du calcul.
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html#Query.KeyConditionExpressions
il est facile de convertir la date-heure au format d'époque
Javascript:
var date = new Date(); var epoch = date.getTime(); // converting back to date-time var initial_date = new Date(epoch);
C #
var date = DateTime.UtcNow; var epoch = new DateTimeOffset(date).ToUnixTimeSeconds(); // converting back to date-time var initial_date = DateTimeOffset.FromUnixTimeSeconds(epoch);
Python
import time epoch = time.time() # converting back to date-time initial_date = time.gmtime(epoch )
la source