기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon DocumentDB에서 재시도 가능한 쓰기
엔진 버전 8.0.2부터 Amazon DocumentDB는 재시도 가능한 쓰기를 지원합니다. 일시적인 네트워크 오류 또는 기본 선택으로 인해 쓰기 작업이 실패하면 드라이버는 작업을 정확히 한 번 재시도할 수 있습니다. Amazon DocumentDB는 재시도된 쓰기를 중복 제거하므로 작업이 최대 한 번 적용되어 멱등성을 유지합니다.
재시도 가능한 쓰기에는 재시도 가능한 쓰기 프로토콜을 지원하는 MongoDB 호환 드라이버가 필요합니다. 대부분의 현재 MongoDB 호환 드라이버는 기본적으로 재시도 가능한 쓰기를 활성화합니다(retryWrites=true연결 문자열에서 ). 이전 버전에서 엔진 8.0.2로 업그레이드하는 경우 연결 문자열retryWrites=false에서를 제거하여이 기능을 활성화할 수 있습니다.
요구 사항
재시도 가능한 쓰기를 사용하려면 다음 요구 사항을 충족해야 합니다.
-
Amazon DocumentDB 엔진 버전 8.0.2 이상.
-
재시도 가능한 쓰기를 지원하는 MongoDB 호환 드라이버입니다. 최소 버전은 드라이버 설명서를 참조하세요.
-
연결 문자열에가 포함
retryWrites=true되거나 드라이버가 기본적으로 재시도 가능한 쓰기(대부분의 현재 드라이버가 수행)여야 합니다.
지원되는 연산자
재시도 가능한 쓰기는 각 개별 쓰기가 최대 하나의 문서에 영향을 미치는 쓰기 작업에 적용됩니다. 배치 내의 각 쓰기는 별도로 중복 제거되므로 배치 작업은 한정됩니다.
다음 쓰기 작업을 재시도할 수 있습니다.
insertOneinsertManyupdateOnedeleteOnefindOneAndUpdatefindOneAndDeletefindOneAndReplacebulkWrite(insertOne,updateOnedeleteOne, 또는replaceOne작업으로 구성된 경우)
insertMany 및의 경우 배치의 bulkWrite각 문서는 개별적으로 중복 제거됩니다. 재시도가 필요한 경우 아직 적용되지 않은 문서만 삽입됩니다.
참고
commitTransaction 및 abortTransaction는 쓰기가 아닌 트랜잭션 제어 명령으로 재시도할 수도 있습니다. 트랜잭션 내의 개별 쓰기는 재시도할 수 없습니다. 자세한 내용은 제한 사항 섹션을 참조하세요.
제한 사항
Amazon DocumentDB에서 재시도 가능한 쓰기에는 다음 제한 사항이 적용됩니다.
-
updateMany및deleteMany는 재시도할 수 없습니다. -
다중 문 트랜잭션 내의 쓰기는 재시도할 수 없습니다. 트랜잭션 커밋 및 중단 작업은 별도로 재시도할 수 있습니다.
-
문서에는 재시도 가능한 삽입에 대한
_id필드가 포함되어야 합니다. -
재시도 가능한 쓰기는 엔진 버전 8.0.2 이상에서만 사용할 수 있습니다. 이전 엔진 버전에서는 오류를 방지하기 위해 연결 문자열
retryWrites=false에를 설정합니다. -
쿼리 플래너 버전 1.0을 사용하는 클러스터에서는 쓰기 작업을 재시도할 수 없습니다.
-
대용량 문서를 반환하는
findOneAndUpdatefindOneAndDelete, 및findOneAndReplace작업의 경우 전체 결과 문서가 중복 제거를 위해 캐시되므로 재시도 가능한 쓰기로 인해 쓰기 지연 시간이 증가할 수 있습니다. 쓰기 성능이 중요하고 반환된 문서가 큰 경우 해당 워크로드에retryWrites=false대한 설정을 고려하세요.
재시도 가능한 쓰기 활성화
재시도 가능한 쓰기를 활성화하려면 연결 문자열retryWrites=true에를 포함합니다.
mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=true
드라이버의 기본값이 인 경우 연결 문자열retryWrites=false에서 명시적인를 제거할 retryWrites=true수 있습니다.
전체 연결 문자열 연습은 섹션을 참조하세요Amazon DocumentDB에 프로그래밍 방식으로 연결.
재시도 가능한 쓰기 작동 방식
애플리케이션이를 사용하여 쓰기retryWrites=true를 전송하면 드라이버는 논리적 세션 ID(lsid)와 트랜잭션 번호(txnNumber)를 쓰기 명령에 연결합니다. Amazon DocumentDB는 다음 식별자를 사용하여 쓰기를 중복 제거합니다.
-
첫 번째 시도에서 Amazon DocumentDB는 쓰기를 실행하고 결과를 캐싱합니다.
-
드라이버가 동일한 쓰기(
lsid및 동일txnNumber)를 재시도하면 Amazon DocumentDB는 쓰기를 다시 실행하지 않고 캐시된 결과를 반환합니다. -
Amazon DocumentDB는 원본 쓰기 후 60분 동안 재시도를 수행합니다. 드라이버는 즉시 재시도하므로이 기간은 드라이버에 필요한 시간보다 훨씬 더 깁니다.
원래 쓰기 후 60분 이상 후에 재시도가 도착하면 Amazon DocumentDB에 캐시된 결과가 더 이상 없으며 쓰기를 새 작업으로 실행합니다.
오류 처리
다음 오류는 Amazon DocumentDB에서 재시도 가능한 쓰기에만 해당됩니다.
| 오류 코드 | 이름 | 설명 |
|---|---|---|
| 225 | TransactionTooOld | 동일한 세션 및 문에 대한 최신 트랜잭션 번호가 이미 커밋되었으므로이 재시도가 너무 오래되어 적용할 수 없습니다. |
| 301 | 재시도 가능한 쓰기는 지원되지 않음 | 쓰기에는 재시도 가능한 쓰기 필드가 포함되어 있지만 엔진 버전은 재시도 가능한 쓰기를 지원하지 않거나 작업을 재시도할 수 없습니다. 8.0.2 이전의 엔진 버전에 연결할 retryWrites=false 때를 설정합니다. |
retryWrites=false에서 마이그레이션
엔진 버전 8.0.2로 업그레이드하고 현재 연결 문자열retryWrites=false에서를 사용하는 경우:
-
클러스터를 엔진 버전 8.0.2 이상으로 업그레이드합니다.
-
애플리케이션의 연결 문자열
retryWrites=false에서를 제거하거나 로 변경합니다retryWrites=true. -
애플리케이션 코드를 변경할 필요가 없습니다. 드라이버는 재시도를 자동으로 처리합니다.