문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

재시도 가능한 쓰기

이 페이지의 내용

  • 전제 조건
  • 재시도 가능 쓰기 및 다중 문서 트랜잭션
  • 재시도 가능 쓰기 활성화
  • 재시도 가능 쓰기 작업
  • 행동

재시도 가능 쓰기를 사용하면 MongoDB 드라이버에 네트워크 오류가 발생하거나 복제본 세트 또는 샤드 클러스터 에서 정상적인 프라이머리 를 찾을 수 없는 경우 특정 쓰기 작업을 한 번만 자동으로 재시도할 수 있습니다.

재시도 가능 쓰기에는 다음과 같은 요구 사항이 있습니다.

지원되는 배포 토폴로지
재시도 가능 쓰기에는 복제본 세트 또는 샤드 클러스터가 필요하며 독립형 인스턴스는 지원하지 않습니다.
지원되는 스토리지 엔진
재시도 가능 쓰기를 사용하려면 WiredTiger 또는 인메모리 와 같이 문서 수준의 잠금을 지원하는 스토리지 엔진이 필요합니다.
3.6+ MongoDB 드라이버

클라이언트는 MongoDB 3.6 이상용으로 업데이트된 MongoDB 드라이버가 필요합니다.

Java 3.6+

Python 3.6+

C 1.9 이상

Go 1.8+

C# 2.5+

노드 3.0+

Ruby 2.5+

Rust 2.1+

Swift 1.2+

펄(Perl) 2.0+

PHPC 1.4+

Scala 2.2+

C++ 3.6.6+

MongoDB 버전
클러스터에 있는 모든 노드의 MongoDB 버전은 3.6 이상이어야 하며, 클러스터에 있는 각 노드의 featureCompatibilityVersion3.6 이상이어야 합니다. featureCompatibilityVersion 플래그에 대한 자세한 내용은 setFeatureCompatibilityVersion 를 참조하십시오.
쓰기 승인
쓰기 작업에서 쓰기 고려0으로 설정되어 있다면, 이러한 쓰기 작업은 다시 시도할 수 없습니다 .

버전 4.0에 추가.

트랜잭션 커밋 및 중단 작업은 재시도 가능한 쓰기 작업입니다. 커밋 작업 또는 중단 작업에서 오류가 발생하면 MongoDB 드라이버는 retryWrites설정이 false로 되어 있더라도 해당 작업을 한 번만 재시도합니다.

트랜잭션 내부의 쓰기 작업은 retryWrites 값에 관계없이 개별적으로 재시도할 수 없습니다.

트랜잭션에 대한 자세한 내용은 트랜잭션을 참조하세요.

MongoDB 드라이버
MongoDB 4 와 호환되는 드라이버입니다.2 이상에서는 기본적으로 재시도 가능 쓰기 를 활성화합니다. 이전 드라이버에는 retryWrites=true 옵션이 필요합니다. retryWrites=true 옵션은 MongoDB 4 와 호환되는 드라이버를 사용하는 애플리케이션에서 생략할 수 있습니다.2 이상.

재시도 가능 쓰기를 사용하지 않으려면 MongoDB 4.2 이상과 호환되는 드라이버를 사용하는 애플리케이션에서 연결 문자열에 retryWrites=false 포함해야 합니다.
mongosh

재시도 가능 쓰기는 mongosh 에서 기본적으로 활성화되어 있습니다. 재시도 가능 쓰기를 비활성화하려면 --retryWrites=false 명령줄 옵션을 사용합니다.

mongosh --retryWrites=false
mongo

재시도 가능 쓰기는 레거시 mongo 셸에서는 기본적으로 비활성화되어 있습니다. 재시도 가능 쓰기를 활성화하려면 --retryWrites=true 명령줄 옵션을 사용합니다.

mongo --retryWrites=true

다음 쓰기 작업은 승인된 쓰기 고려로 실행된 경우 다시 시도할 수 있습니다. 예를 들어 쓰기 고려{w: 0}일 수 없습니다.

참고

트랜잭션 내부의 쓰기 연산은 개별적으로 재시도할 수 없습니다.

방법
설명
삽입 작업
단일 문서 업데이트 작업
db.collection.remove() 명령어에서 justOnetrue입니다.
단일 문서 삭제 작업
findAndModify 작업입니다. 모든 findAndModify 작업은 단일 문서 작업입니다.

db.collection.bulkWrite() 다음 쓰기 작업을 사용합니다.

단일 문서 쓰기 작업으로만 구성된 대량 쓰기 작업입니다. 재시도 가능한 일괄 작업에는 지정된 쓰기 작업의 모든 조합이 포함될 수 있지만 updateMany 등의 다중 문서 쓰기 작업은 포함될 수 없습니다.
단일 문서 쓰기 작업으로만 구성된 대량 쓰기 작업입니다. 재시도 가능한 대량 작업은 지정된 쓰기 작업의 어떤 조합도 포함할 수 있지만, multi 옵션에 true가 지정된 update 와 같은 다중 문서 쓰기 작업은 포함할 수 없습니다.

참고

샤드 키 값 업데이트

MongoDB 4.2부터는 재시도 가능 쓰기로 또는 트랜잭션에서 단일 문서 업데이트/findAndModify 작업을 실행하여 문서의 샤드 키 값을 업데이트할 수 있습니다(샤드 키 필드가 불변 _id 필드인 경우 제외). 자세한 내용은 문서의 샤드 키 값 변경을 참조하세요.

MongoDB 재시도 가능 쓰기는 한 번만 재시도합니다. 이는 일시적인 네트워크 오류 및 복제본 세트 투표를 해결하는 데 도움이 되지만 지속적인 네트워크 오류는 해결하지 못합니다.

드라이버가 대상 복제본 세트 또는 샤드된 클러스터 샤드에서 정상 프라이머리를 찾을 수 없는 경우 드라이버는 serverSelectionTimeoutMS 밀리초 동안 새 프라이머리를 확인하기 위해 대기한 후 작업을 다시 시도합니다. 재시도 가능 쓰기(Retryable writes)는 페일오버 기간이 serverSelectionTimeoutMS을 초과하는 경우를 처리하지 않습니다.

경고

쓰기 연산을 실행한 후 클라이언트 애플리케이션이 일시적으로 localLogicalSessionTimeoutMinutes 이상 응답하지 않게 되는 경우에는 클라이언트 애플리케이션이 다시 시작되지 않고 응답을 시작할 때 쓰기 연산이 다시 시도되어 적용될 수 있습니다.

버전 3 에 추가되었습니다.6.3.

serverStatus 명령 및 해당 mongosh 셸 헬퍼 db.serverStatus() 에는 transactions 섹션에 재시도 가능 쓰기에 대한 통계가 포함되어 있습니다.

공식 MongoDB 4.2 시리즈 드라이버는 기본적으로 재시도 가능 쓰기 기능을 활성화합니다. local 데이터베이스에 쓰는 애플리케이션은 재시도 가능 쓰기를 명시적으로 사용하지 않도록 설정한 경우를 제외하고 4.2 시리즈 드라이버로 업그레이드할 때 쓰기 오류가 발생합니다.

재시도 가능 쓰기를 사용하지 않으려면 MongoDB cluster의 연결 문자열에retryWrites=false 를 지정합니다.

← 대량 쓰기 작업