2

Besoin d'aide avec DynamoDB.Implémenter l'horodatage CreatedAt et UpdatedAt pour DynamoDB Android SDK

Je suis en train de basculer l'extrémité arrière de Parse.com (car ils partent à la retraite) vers le hub mobile AWS.

Je souhaite capturer et enregistrer la date et l'heure pour lesquelles une ligne ou un élément de données est écrit dans ma table dynamodb. En analyse, c'est fait automatiquement mais pas dans dynamodb.

J'ai cherché des indices sur Internet mais je n'ai pas trouvé d'explication ou d'exemple solide pour le moment.

Quelqu'un peut-il me diriger dans la bonne direction ou s'il vous plaît montrer un exemple de code ici sur la façon d'implémenter CreatedAt et UpdatedAt dans dynamodb. Puis-je obtenir l'heure de mon système et l'enregistrer sur dynamodb ou obtenir l'heure du serveur?

Si j'ai besoin d'obtenir l'horodatage du serveur, quelle heure de serveur AWS puis-je obtenir et comment puis-je l'implémenter?

Merci beaucoup.

Répondre

0

Ceci est difficile pour un certain nombre de raisons. Tout d'abord, si vous avez besoin d'un ordre strict des événements, l'utilisation du temps peut provoquer un tas d'erreurs et vous pouvez vous intéresser aux algorithmes de systèmes distribués plus avancés tels que https://en.wikipedia.org/wiki/Lamport_timestamps ou https://en.wikipedia.org/wiki/Vector_clock. Si juste «joli près» est bien pour votre cas d'utilisation, la chose principale que vous devez garder à l'esprit est que l'heure du système de l'appareil mobile est souvent incorrecte. L'utilisateur peut changer l'heure, se déplacer entre les fuseaux horaires, etc. Il y a quelques choses que vous pourriez faire. B) Dynamo renvoie également un en-tête de date lorsque vous faites des appels que vous pourriez regarder, mais il est retourné dans la réponse. Cependant, vous pouvez au moins l'utiliser pour voir si la date sur votre appareil est exacte. Le SDK quelque chose de similaire si vous voyez https://github.com/aws/aws-sdk-android/blob/78cdf680115a891a6e1355c56068e2f56e3c5056/aws-android-sdk-core/src/main/java/com/amazonaws/http/AmazonHttpClient.java lorsque Dynamo renvoie une erreur si la date dans la signature de la demande ne correspond pas à l'heure attendue par Dynamo. Ce n'est probablement pas la meilleure solution, mais devrait au moins vous donner des idées d'avenues possibles.

+0

Nous vous remercions de votre réponse.Cela donne plus d'options de piratage pour moi. Je vais les regarder et partager ma solution ici. –

0

J'ai décidé de capturer System.currentTimeMillis() au moment où un utilisateur clique sur le bouton de publication/enregistrement de mon application et enregistre le temps d'Epoch en millisecondes dans mon attribut DB CreatedAT. J'ai lu here: "L'une des choses les plus importantes à réaliser est que 2 personnes appelant System.currentTimeMillis() en même temps devraient obtenir le même résultat, peu importe où elles se trouvent sur la planète" Donc j'ai l'intention de générer un UUID aléatoire Clé primaire (clé de hachage), puis enregistrez le temps CreatedAT de l'utilisateur en tant que clé de tri.

Je suis ouvert à toutes les autres options pratiques. Je vais utiliser cela entre temps pour tester et observer le comportement.

1

AWS permet d'utiliser un AWS Lambda with Amazon DynamoDB

Cela vous permet de déclencher le code côté serveur basé sur les événements DynamoDB. Il est beaucoup plus impliqué que Parse mais vous permettra d'éviter d'utiliser des dates/heures/codes côté application pour gérer les valeurs CreatedAt et UpdatedAt.

Ces valeurs datetime doivent être Ints ou Strings car Datetime n'est pas un type JSON et DynamoDB ne va pas au-delà des types de champs JSON de base.