1

시나리오 : 버전 번호로 낙관적 잠금을 지원하는 Dynamo DB 테이블이 있습니다. 두 개의 동시 스레드가 동일한 기본 키 값을 가진 두 개의 다른 항목을 해당 테이블에 저장하려고합니다.저장 작업 중 Dynamo DB 낙관적 잠금 동작

질문 : 후자의 저장 작업을 위해 ConditionalCheckFailedException이 발생합니까?

+0

찾을 수 있습니다. 내 대답이 귀하의 질문을 해결했는지 알려주십시오. –

답변

1

예, 동일한 데이터를 삽입하려고하는 두 번째 스레드는 ConditionalCheckFailedException을 던집니다.

com.amazonaws.services.dynamodbv2.model.ConditionalCheckFailedException 

데이터베이스에 항목을 저장하면 후속 업데이트의 버전이 DynamoDB 테이블의 값 (예 : 서버 측 값)과 일치해야합니다. 새 항목의 경우, DynamoDBMapper 당신이 항목을 검색 할 경우, 그 특성 중 하나 이상을 업데이트하고 저장, 변경 사항을 저장하려고 번호 1 동작 은 성공의 초기 버전을 할당 - 저장

클라이언트 측의 버전 번호와 서버 측의 이 일치하는 경우 DynamoDBMapper는 버전 번호 을 자동으로 증가시킵니다.

1

우리는 이전에도 비슷한 사용 사례가 있었지만 우리의 경우에는 여러 스레드가 먼저 dynamoDB에서 읽고 값을 업데이트하려고했습니다.

마지막으로 읽는 시점까지 버전이 변경되고 문서를 업데이트하려고 시도하며 DynamoDB에서 최신 값을 읽지 않으면 중간 업데이트가 손실됩니다 (업데이트 손실로 알려져 있음). 자세한 내용은 aws-docs을 참조하십시오).

이 유스 케이스가 있거나 없으면 2 개의 스레드가 값을 업데이트하려고 시도하고 있고 그 중 하나가 DynamoDB에 도달하는 동안 다른 버전을 얻는 경우 ConditionalCheckFailedException 예외. 이 오류에 대한

자세한 정보는 귀하의 질문에 따라 후속 쿼리 문의하시기 바랍니다 여기 http://grepcode.com/file/repo1.maven.org/maven2/com.michelboudreau/alternator/0.10.0/com/amazonaws/services/dynamodb/model/ConditionalCheckFailedException.java