내용으로 건너뛰기

DynamoDB 테이블에 낙관적 잠금을 구현하려면 어떻게 해야 합니까?

2분 분량
0

Amazon DynamoDB 테이블에 DynamoDBMapper 대신 낙관적 잠금을 사용하고 싶습니다.

간략한 설명

DynamoDBMapper 없이 낙관적 잠금을 구현하려면 조건 및 업데이트 표현식을 사용하여 AWS SDK에 사용자 지정 코드를 작성하십시오. 사용자 지정 코드는 테이블의 버전 번호가 일치하는지 확인합니다.

해결 방법

다음 단계를 완료하십시오.

  1. 버전 번호 속성을 사용하여 DynamoDB 테이블을 만듭니다.
    참고: 업데이트하려는 각 항목에 버전 번호를 연결해야 합니다.

  2. 업데이트 표현식SET 절을 추가하여 항목을 업데이트합니다. 업데이트 표현식이 없는 경우 새로 만듭니다.
    업데이트 표현식 구문 예시:

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

    참고: attribute_to_update를 속성으로 바꾸고 new_value를 업데이트하려는 새 값으로 바꾸십시오.

  3. 조건 표현식을 업데이트하여 요청과 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’ 오류가 발생하는 이유는 무엇입니까?

AWS 공식업데이트됨 2달 전