Amazon DynamoDB 테이블에 DynamoDBMapper 대신 낙관적 잠금을 사용하고 싶습니다.
간략한 설명
DynamoDBMapper 없이 낙관적 잠금을 구현하려면 조건 및 업데이트 표현식을 사용하여 AWS SDK에 사용자 지정 코드를 작성하십시오. 사용자 지정 코드는 테이블의 버전 번호가 일치하는지 확인합니다.
해결 방법
다음 단계를 완료하십시오.
-
버전 번호 속성을 사용하여 DynamoDB 테이블을 만듭니다.
참고: 업데이트하려는 각 항목에 버전 번호를 연결해야 합니다.
-
업데이트 표현식에 SET 절을 추가하여 항목을 업데이트합니다. 업데이트 표현식이 없는 경우 새로 만듭니다.
업데이트 표현식 구문 예시:
UpdateExpression='SET #attr = :val',
ExpressionAttributeNames={
'#attr': 'attribute_to_update'
},
ExpressionAttributeValues={
':val': new_value
},
ConditionExpression='condition_expression'
참고: attribute_to_update를 속성으로 바꾸고 new_value를 업데이트하려는 새 값으로 바꾸십시오.
-
조건 표현식을 업데이트하여 요청과 DynamoDB 테이블에 있는 값 사이의 버전 번호를 테스트합니다. 조건 표현식이 없는 경우 새로 만듭니다.
조건 표현식 구문 예시:
ExpressionAttributeNames = {
"#attr": "attribute_name"
}
ExpressionAttributeValues = {
":val": "new_value"
}
참고: attribute_name을 표현식 속성 이름으로 바꾸고 new_value를 업데이트하려는 새 값으로 바꾸십시오.
버전 번호가 일치하면 업데이트가 성공한 것입니다. 버전 번호가 일치하지 않으면 ‘ConditionalCheckFailedExpection’ 오류가 발생하고 다른 클라이언트에서 변경한 내용을 덮어쓸 수 없습니다.
‘ConditionalCheckFailedExpection’ 오류를 관리하려면 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
사용자 지정 표현식을 테스트하려면 요청에 잘못된 버전 번호를 포함하십시오.
관련 정보
항목 올리기(Java)
항목 올리기(.NET)
DynamoDB 조건 표현식 CLI 예제
DynamoDB에서 ‘ConditionalCheckFailedException’ 오류가 발생하는 이유는 무엇입니까?