SDK for Java 버전 1과 버전 2의 낙관적 잠금 차이점 - AWS SDK for Java 2.x

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

SDK for Java 버전 1과 버전 2의 낙관적 잠금 차이점

V1과 V2 모두 bean 클래스에 하나의 속성을 표시하여 버전 번호를 저장하는 속성 주석으로 낙관적 잠금을 구현합니다.

낙관적 잠금 동작의 차이점
V1 V2
bean 클래스 주석 @DynamoDBVersionAttribute @DynamoDbVersionAttribute(V2는 소문자 ‘b’ 사용)
초기 저장 버전 번호 속성은 1로 설정됩니다.

@DynamoDbVersionAttribute(startAt = X)로 설정된 버전 속성의 시작 값입니다. 기본값은 0입니다.

업데이트 조건부 확인에서 업데이트 중인 객체의 버전 번호가 데이터베이스의 번호와 일치하는지 확인하면 버전 번호 속성이 1씩 증가합니다.

조건부 확인에서 업데이트 중인 객체의 버전 번호가 데이터베이스의 번호와 일치하는지 확인하면 버전 번호 속성이 증분합니다.

@DynamoDbVersionAttribute(incrementBy = X)로 설정된 incrementBy 옵션에 따라 증분하는 버전 번호 속성입니다. 기본 값은 1입니다.

삭제 DynamoDBMapper는 삭제 중인 객체의 버전 번호가 데이터베이스의 버전 번호와 일치하는지 조건부 확인을 추가합니다.

V2는 삭제 작업에 대한 조건을 자동으로 추가하지 않습니다. 삭제 동작을 제어하려면 조건 표현식을 수동으로 추가해야 합니다.

다음 예제에서 recordVersion은 bean의 버전 속성입니다.

// 1. Read the item and get its current version. Customer item = customerTable.getItem(Key.builder().partitionValue("someId").build()); AttributeValue currentVersion = item.getRecordVersion(); // 2. Create conditional delete with the `currentVersion` value. DeleteItemEnhancedRequest deleteItemRequest = DeleteItemEnhancedRequest.builder() .key(KEY) .conditionExpression(Expression.builder() .expression("recordVersion = :current_version_value") .putExpressionValue(":current_version_value", currentVersion) .build()).build(); customerTable.deleteItem(deleteItemRequest);
조건 확인을 사용한 트랜잭션 쓰기 addConditionCheck 메서드에서 @DynamoDBVersionAttribute로 주석이 달린 bean 클래스는 사용할 수 없습니다. transactWriteItems 요청에 대해 addConditionCheck 빌더 메서드의 @DynamoDbVersionAttribute 주석과 함께 bean 클래스를 사용할 수 있습니다.
비활성화 낙관적 잠금은 DynamoDBMapperConfig.SaveBehavior 열거 값을 UPDATE에서 CLOBBER로 변경하면 사용 해제할 수 있습니다.

@DynamoDbVersionAttribute 주석을 사용하지 마세요.