Ce message est un avis / mémo personnel et ne représente pas l'entreprise à laquelle j'appartiens.
DynamoDB a une fonction appelée ** Mise à jour conditionnelle **, qui permet les opérations de mise à jour atomique.
Par exemple, cela ressemble à ce qui suit. --Mettre s'il n'y a pas d'article avec une clé spécifique --Mise à jour s'il existe un attribut spécifique d'un élément spécifique
Pour plus d'informations, consultez le Guide du développeur DynamoDB (http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithItems.html).
En appliquant ce ** «Mettre s'il n'y a pas d'article avec une clé spécifique» ** et en lisant la présence ou l'absence de l'article comme suit, la gestion des verrous peut être mise en œuvre.
Allez dans DynamoDB avec la touche A pour mettre l'élément. A ce moment, l'élément de la clé A est --Existe: quelqu'un d'autre l'a déjà verrouillé. L'opération de mise échoue (la rend).
Si vous l'implémentez avec Python et boto, cela ressemble à ceci.
lock_key
def lock_key(key):
try:
dynamodb.put_item(
'TABLE_NAME',
{'key' : { "S" : key }},
expected = {
'key' : { "Exists" : False }
}
)
return True
except Exception,e:
return False
Utilisez le nom de fichier comme clé pour placer l'élément dans la table. Renvoie True si Put réussit sans éléments existants, False dans le cas contraire.
J'ai écrit un outil pour gérer le téléchargement de fichiers sur S3 en utilisant ce mécanisme. https://gist.github.com/imaifactory/6132f8a60461584b4613
Puisqu'il n'est pas nécessaire de s'inquiéter des fichiers qui ont été téléchargés une fois de nouveau téléchargés, vous pouvez télécharger un grand nombre de fichiers en parallèle, et même si le processus échoue au milieu, vous pouvez recommencer. En fait, j'ai utilisé ce mécanisme pour transférer environ 8 000 à 10 000 fichiers journaux vers S3 par jour pendant 3 à 4 mois, mais j'ai pu fonctionner sans omission ni duplication.
La synchronisation s3 d'Awscli est pratique, mais si vous êtes préoccupé par les mesures d'omission / duplication pour l'utiliser pour la production, vous pouvez l'implémenter comme ceci.
冪 etc.! 冪 etc.!
Recommended Posts