복제 세트에 대한 쓰기 컨커런트
복제본 세트에 대한 쓰기 고려설정은 쓰기 작업이 성공으로 반환되기 전에 해당 작업을 승인해야 하는 데이터 보유 노드(프라이머리 노드와 세컨더리 노드, 중재자 제외)의 수를 나타냅니다. 노드는 쓰기 작업을 성공적으로 수신하고 적용한 후에만 쓰기 작업을 승인할 수 있습니다.
복제본 세트의 경우:
w: "majority"
쓰기 고려는 쓰기 작업이 데이터를 보유한 투표 노드의 계산된 과반수에게 지속적으로 커밋되었음을 승인해야 합니다. 대부분의 복제본 세트에서w: "majority"
가 기본 쓰기 고려입니다.w: 1
로 설정된 쓰기 고려는 쓰기 작업의 승인을 오로지 프라이머리 복제본 세트 노드로부터 받습니다.1
보다 큰 숫자 값을 가진 쓰기 고려에는 지정된 값을 충족하는 데 필요한 만큼의 세컨더리와 프라이머리의 승인이 필요합니다. 쓰기 고려 임계값을 충족하기 위해 세컨더리가 꼭 투표 노드일 필요는 없습니다. 지정된 쓰기 고려 값은 복제본 세트에 있는 데이터 보유 노드의 총수보다 클 수 없습니다.
쓰기 승인 동작에 대한 전체 문서는 승인 동작을 참조하세요.
쓰기 고려 승인이 필요한 쓰기 작업을 실행하는 애플리케이션은 지정된 쓰기 고려에 대해 필요한 수의 멤버에게서 프라이머리가 승인을 받을 때까지 기다립니다. 쓰기 고려가 1 또는 w : "majority"
보다 큰 w
의 경우 프라이머리는 쓰기 고려 승인을 반환하기 전에 필요한 수의 세컨더리가 쓰기를 승인할 때까지 기다립니다. w: 1
쓰기 고려의 경우, 프라이머리는 요청된 쓰기 우려에 기여할 수 있는 자격이 있으므로 쓰기를 로컬로 적용하는 즉시 쓰기 고려 승인을 반환할 수 있습니다.
쓰기를 승인하는 노드가 많을수록 프라이머리에 문제가 발생했을 때 쓰여진 데이터가 롤백될 가능성이 줄어듭니다. 그러나 쓰기 고려 수준을 높게 지정하면 클라이언트가 요청된 수준의 쓰기 고려 승인을 받을 때까지 기다려야 하므로 지연 시간이 늘어날 수 있습니다.
특정 쓰기 작업에 적합한 쓰기 고려를 선택하는 것은 애플리케이션의 성능 목표와 데이터 내구성 요구 사항에 따라 달라집니다. 롤백을 방지하기 위해 쓰기 고려를 구성하는 방법에 대한 자세한 내용은 복제본 세트 롤백 방지하기를 참조하세요.
복제본 세트에 쓰기 작업 확인
다음 작업에는 insertOne()
메서드에 대한 writeConcern
옵션이 포함되어 있습니다. 이 작업은 "majority"
쓰기 고려 및 5초의 타임아웃을 지정합니다.
wtimeout
쓰기 고려 매개 변수는 작업이 무기한 차단되지 않도록 합니다.
db.products.insertOne( { item: "envelopes", qty : 100, type: "Clasp" }, { writeConcern: { w: "majority" , wtimeout: 5000 } } )
애플리케이션은 프라이머리에서 데이터를 보유한 투표 멤버의 계산된 과반수가 쓰기 작업을 승인했음을 나타내는 쓰기 고려 승인을 반환할 때까지 기다립니다. 예를 들어, 3명의 멤버로 구성된 복제본 세트(PSS)에서 작업을 수행하려면 3명의 멤버 중 2명의 승인이 필요합니다. 나중에 투표권이 있는 세컨더리 멤버 2명을 추가로 포함하도록 복제본 세트를 확장하는 경우, 동일한 작업을 수행하려면 5명의 복제본 세트 멤버 중 3명의 승인이 필요합니다. 만약 프라이머리가 wtimeout
제한 내에 쓰기 고려 승인을 반환하지 않으면 쓰기 작업은 쓰기 고려 오류로 실패합니다.
지정된 쓰기 우려에 대한 대기 시간이 초과된 쓰기 작업은 필요한 수의 복제본 세트 노드가 wtimeout
기간 내에 쓰기 작업을 승인하지 않았음을 의미하지만, 반드시 프라이머리 노드가 쓰기를 적용하지 못했다는 것을 의미하지는 않습니다. 이터는 쓰기 고려 오류가 발생한 시점에 복제본 세트 노드의 일부에 존재할 수 있으며, 클러스터의 모든 노드에 해당 데이터가 있을 때까지 복제가 계속될 수 있습니다. 애플리케이션은 쓰기 고려 상태에 관계없이 기록된 데이터의 잠재적 가용성을 고려해야 합니다.
쓰기 고려를 지정하는 정확한 구문은 쓰기 작업에 따라 다릅니다. 쓰기 고려에 대한 지침은 쓰기 작업에 대한 설명서를 참조하세요. 쓰기 고려에 대한 전체 문서는 쓰기 고려참조하세요.
기본 쓰기 고려 수정
setDefaultRWConcern
명령을 실행하여 복제본 세트에 대한 기본 쓰기 고려를 수정할 수 있습니다.
특정 쓰기 고려가 있는 쓰기 작업을 실행하는 경우 쓰기 작업은 쓰기 고려 대신 기본값을 사용합니다.
사용자 지정 쓰기 우려 사항
복제본 세트의 노드에 태그를 설정하고 결과 태그 세트를 사용하여 사용자 지정 쓰기 고려를 만들 수 있습니다. 태그 세트를 사용하여 사용자 지정 쓰기 고려를 구성하는 방법에 대한 자세한 내용은 복제본 세트 태그 집합 구성을 참조하세요.