Quero usar o bloqueio positivo na minha tabela do Amazon DynamoDB em vez do DynamoDBMapper.
Breve descrição
Para implementar um bloqueio positivo sem um DynamoDBMapper, escreva um código personalizado em seu AWS SDK com expressões de condição e atualização. O código personalizado verifica se os números da versão em sua tabela coincidem.
Resolução
Conclua as etapas a seguir:
-
Crie uma tabela do DynamoDB com um atributo de número de versão.
Observação: você deve associar um número de versão a cada item que você deseja atualizar.
-
Adicione a cláusula SET à sua expressão de atualização para atualizar o item. Se você não tiver uma expressão de atualização, crie uma.
Exemplo de sintaxe de expressão de atualização:
UpdateExpression='SET #attr = :val',
ExpressionAttributeNames={
'#attr': 'attribute_to_update'
},
ExpressionAttributeValues={
':val': new_value
},
ConditionExpression='condition_expression'
Observação: substitua attribute_to_update pelos seus atributos e new_value pelo novo valor para o qual você deseja atualizar.
-
Atualize a expressão da condição para testar o número da versão entre a solicitação e o valor na tabela do DynamoDB. Se você não tiver uma expressão de condição, crie uma.
Exemplo de sintaxe de expressão de condição:
ExpressionAttributeNames = {
"#attr": "attribute_name"
}
ExpressionAttributeValues = {
":val": "new_value"
}
Observação: substitua attribute_name pelo nome do seu atributo de expressão e new_value pelo novo valor para o qual você deseja atualizar.
Se os números da versão corresponderem, a atualização será bem-sucedida. Se os números da versão não corresponderem, você receberá o erro "ConditionalCheckFailedExpection" e não poderá substituir as alterações feitas por outros clientes.
Para gerenciar o erro “ConditionalCheckFailedExpection”, use a seguinte lógica de tratamento de erros em seu 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
Para testar suas expressões personalizadas, inclua um número de versão errado em sua solicitação.
Informações relacionadas
Colocar um item (Java)
Colocar um item (.NET)
Exemplo de expressão de condição do DynamoDB na CLI
Why do I get a "ConditionalCheckFailedException" error in DynamoDB? (Por que recebo o erro “ConditionalCheckFailedException” no DynamoDB?)