Passer au contenu

Comment implémenter un verrouillage optimiste sur une table DynamoDB ?

Lecture de 2 minute(s)
0

Je souhaite utiliser le verrouillage optimiste pour ma table Amazon DynamoDB à la place de DynamoDBMapper.

Brève description

Pour implémenter un verrouillage optimiste sans DynamoDBMapper, écrivez du code personnalisé dans votre kit SDK AWS avec des expressions de condition et de mise à jour. Le code personnalisé vérifie si les numéros de version de votre table correspondent.

Résolution

Procédez comme suit :

  1. Créez une table DynamoDB avec un attribut de numéro de version.
    Remarque : Vous devez associer un numéro de version à chaque élément que vous souhaitez mettre à jour.

  2. Ajoutez la clause SET à votre expression de mise à jour pour mettre à jour l'élément. Si vous n’avez pas d'expression de mise à jour, créez-en une.
    Exemple de syntaxe d'expression de mise à jour :

    UpdateExpression='SET #attr = :val',
    ExpressionAttributeNames={
        '#attr': 'attribute_to_update'
    },
    ExpressionAttributeValues={
        ':val': new_value
    },
    ConditionExpression='condition_expression'

    Remarque : Remplacez attribute_to_update par vos attributs et new_value par la nouvelle valeur vers laquelle vous souhaitez effectuer la mise à jour.

  3. Mettez à jour l'expression de condition pour tester le numéro de version entre la requête et la valeur de la table DynamoDB. Si vous n'avez pas d'expression de condition, créez-en une.
    Exemple de syntaxe d'expression de condition :

    ExpressionAttributeNames = {
        "#attr": "attribute_name"
    }
    
    ExpressionAttributeValues = {
        ":val": "new_value"
    }

    Remarque : Remplacez attribute_name par le nom de l'attribut d’expression et new_value par la nouvelle valeur vers laquelle vous souhaitez effectuer la mise à jour.

Si les numéros de version correspondent, la mise à jour est réussie. Si les numéros de version ne correspondent pas, l'erreur « ConditionalCheckFailedExpection » s'affiche et vous ne pouvez pas remplacer les modifications apportées par d'autres clients.

Pour gérer l'erreur « ConditionalCheckFailedExpection », utilisez la logique de gestion d’erreurs suivante dans votre kit SDK AWS :

print("Update successful")
except ClientError as e:
if e.response['Error']['Code'] == 'ConditionalCheckFailedException':
print("Item was modified by another process. Please retry.")
else: raise e

Pour tester vos expressions personnalisées, incluez un numéro de version incorrect dans votre requête.

Informations connexes

Insérer un élément (Java)

Insérer un élément (.NET)

Exemple d'interface de ligne de commande d'expression de condition DynamoDB

Pourquoi l'erreur « ConditionalCheckFailedException » s'affiche-t-elle dans DynamoDB ?

AWS OFFICIELA mis à jour il y a un an