[PYTHON] Utilisez DynamoDB comme gestionnaire de verrouillage

Ce message est un avis / mémo personnel et ne représente pas l'entreprise à laquelle j'appartiens.

Mise à jour conditionnelle DynamoDB

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

Gestion des verrous avec mise à jour conditionnelle

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.

Appliquer pour gérer les téléchargements de fichiers vers S3

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

Utilisez DynamoDB comme gestionnaire de verrouillage
Utiliser Remotte en tant qu'utilisateur
Utilisez pymol comme bibliothèque python
Utilisez Blender comme module Python
Utilisez le module de papier électronique comme liste de tâches
Utiliser DynamoDB avec Python
Utilisez Property Decorator?
Utiliser KNP comme analyseur de dépendances universel avec spaCy
Comment utiliser Fujifilm X-T3 comme webcam sur Ubuntu 20.04
Comment utiliser cuML SVC comme classificateur CV Gridsearch
[Python] Utiliser les données au format JSON comme objet de type dictionnaire
Comment utiliser un fichier autre que .fabricrc comme fichier de configuration
[Python] Utiliser une séquence de chaînes
Les débutants ajoutent des disques et les utilisent comme système de fichiers (´ ・ ω ・ `)
Utilisez la touche CapsLock comme la touche Ctrl avec la commande xmodmap.
Utilisez Jupyter Notebook comme outil de test unitaire ou de création manuelle
Utilisez youtube_dl comme module python. annexe) Erreur Nico Nico Video HTTP 403