Salta al contenuto

Come posso implementare il blocco ottimistico in una tabella DynamoDB?

2 minuti di lettura
0

Desidero utilizzare il blocco ottimistico per la mia tabella Amazon DynamoDB anziché DynamoDBMapper.

Breve descrizione

Per implementare il blocco ottimistico senza DynamoDBMapper, scrivi il codice personalizzato in AWS SDK con espressioni di condizione e aggiornamento. Il codice personalizzato verifica se i numeri di versione nella tabella corrispondono.

Risoluzione

Completa i seguenti passaggi:

  1. Crea una tabella DynamoDB con un attributo numero di versione.
    Nota: devi associare un numero di versione a ciascun elemento che desideri aggiornare.

  2. Aggiungi la clausola SET all'espressione di aggiornamento per aggiornare l'elemento. Se non disponi di un'espressione di aggiornamento, creane una.
    Esempio di sintassi dell'espressione di aggiornamento:

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

    Nota: sostituisci attribute_to_update con i tuoi attributi e new_value con il nuovo valore al quale desideri eseguire l'aggiornamento.

  3. Aggiorna l'espressione di condizione per verificare il numero di versione tra la richiesta e il valore nella tabella DynamoDB. Se non disponi di un'espressione di condizione, creane una.
    Esempio di sintassi dell'espressione di condizione:

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

    Nota: sostituisci attribute_name con il nome del tuo attributo espressione e new_value con il nuovo valore al quale desideri eseguire l'aggiornamento.

Se i numeri di versione corrispondono, l'aggiornamento ha esito positivo. Se i numeri di versione non corrispondono, ricevi l'errore "ConditionalCheckFailedExpection" e non puoi sovrascrivere le modifiche apportate da altri client.

Per gestire l'errore "ConditionalCheckFailedExpection", utilizza la seguente logica di gestione degli errori in AWS SDK:

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

Per verificare le espressioni personalizzate, includi un numero di versione errato nella richiesta.

Informazioni correlate

Collocazione di un elemento (Java)

Collocazione di un elemento (.NET)

Esempio CLI di espressione di condizione DynamoDB

Why do I get a "ConditionalCheckFailedException" error in DynamoDB? (Perché ricevo un errore "ConditionalCheckFailedException" in DynamoDB?)

AWS UFFICIALEAggiornata 2 mesi fa