문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ /

readConcern "majority"

이 페이지의 내용

  • 성능
  • 가용성
  • 예제
  • 스토리지 엔진 지원
  • 읽기 컨커런트 "majority" 및 트랜잭션
  • 읽기 고려 "majority" 및 애그리게이션
  • 자체 쓰기 읽기
  • 기본-보조-아비터 복제본 세트
"majority"

다중 문서 트랜잭션과 관련이 없는 읽기 작업의 경우, 읽기 고려 "majority"는 읽은 데이터를 복제본 세트 멤버의 과반수가 승인했음을 보장합니다(즉, 읽은 문서는 지속될 수 있으며 롤백되지 않도록 보장).

다중 문서 트랜잭션 에서 실행되는 작업의 경우, 읽기 고려 "majority" 는 트랜잭션이 쓰기 고려 "majority" 로 커밋되는 경우에만 보장을 제공합니다. 그렇지 않으면 "majority" 읽기 고려가 트랜잭션에서 읽은 데이터에 대한 보장을 제공하지 않습니다.

읽기 고려 수준에 관계없이 노드의 최신 데이터는 시스템에 있는 데이터의 최신 버전을 반영하지 않을 수 있습니다.

각 복제본 세트 멤버는 과반수 커밋 포인트의 데이터 뷰를 메모리에 유지하며, 과반수 커밋 포인트는 프라이머리에서 계산합니다. 읽기 고려 "majority"를 해결하기 위해 노드는 이 뷰에서 데이터를 반환하며 성능 비용 측면에서 다른 읽기 고려와 비슷합니다.

읽기 고려 "majority" 는 인과적으로 일관적인 세션 및 트랜잭션의 유무에 관계없이 사용할 수 있습니다.

경고

프라이머리-세컨더리-중재자(PSA) 아키텍처를 사용 중이라면 다음을 고려하세요.

  • 쓰기 고려 "majority"는 세컨더리를 사용할 수 없거나 지연되었을 때 성능 문제를 일으킬 수 있습니다. 이러한 문제를 완화하는 방법은 PSA 복제본 세트의 성능 문제 완화를 참조하세요.

  • 글로벌 기본값 "majority" 를 사용하고 있고 쓰기 고려가 과반수 크기보다 작으면 쿼리가 오래된 (완전히 복제되지 않은) 부실 데이터를 반환할 수 있습니다.

세 멤버로 구성된 복제본 세트에 0을 쓰는 쓰기 작업의 다음 타임라인을 고려해 보십시오.

참고

단순화를 위해 이 예에서는 다음과 같은 상황을 가정합니다.

  • 쓰기 0 이전의 모든 쓰기가 모든 구성원에 성공적으로 복제되었습니다.

  • 쓰기 이전은 쓰기 0 이전의 이전 쓰기입니다.

  • Write 0 이후에는 다른 쓰기가 발생하지 않았습니다.

세 멤버 복제본 세트에 대한 쓰기 작업의 타임라인입니다.
시간
이벤트
가장 최근 글
가장 최근 w: "대다수" 쓰기
t 0
기본 적용 쓰기 0
기본: 쓰기 0
보조 1: 쓰기 prev
보조 2: 쓰기 이전
기본: 쓰기 이전
보조 1: 쓰기 prev
보조 2: 쓰기 이전
t 1
보조 1은 쓰기 0을적용합니다.
기본: 쓰기 0
보조 1: 쓰기 0
보조 2: 쓰기 이전
기본: 쓰기 이전
보조 1: 쓰기 prev
보조 2: 쓰기 이전
2
보조 2 는 쓰기 0을 적용합니다.
기본: 쓰기 0
보조 1: 쓰기 0
보조 2: 쓰기 0
기본: 쓰기 이전
보조 1: 쓰기 prev
보조 2: 쓰기 이전
t 3
프라이머리는 세컨더리 1에 성공적으로 복제되었음을 알리고 클라이언트에 확인 메시지를 보냅니다.
기본: 쓰기 0
보조 1: 쓰기 0
보조 2: 쓰기 0
기본: 쓰기 0
보조 1: 쓰기 prev
보조 2: 쓰기 이전
t 4
주 서버가 보조 서버 2로복제가 성공했음을 인식합니다.
기본: 쓰기 0
보조 1: 쓰기 0
보조 2: 쓰기 0
기본: 쓰기 0
보조 1: 쓰기 prev
보조 2: 쓰기 이전
t 5
보조 1은 (정기적인 복제 메커니즘을 통해) 가장 최근의 w에 대한 스냅샷을 업데이트하라는 알림을 받습니다. "majority" 쓰기
기본: 쓰기 0
보조 1: 쓰기 0
보조 2: 쓰기 0
기본: 쓰기 0
보조 1: 쓰기 0
보조 2: 쓰기 이전
t 6
보조 2는 (정기적인 복제 메커니즘을 통해) 가장 최근의 w에 대한 스냅샷을 업데이트하라는 알림을 받습니다. "majority" 쓰기
기본: 쓰기 0
보조 1: 쓰기 0
보조 2: 쓰기 0
기본: 쓰기 0
보조 1: 쓰기 0
보조 2: 쓰기 0

그런 다음, 다음 표에는 "majority" 읽기 고려가 있는 읽기 작업이 T 시점에 볼 수 있는 데이터 상태가 요약되어 있습니다.

세 멤버 복제본 세트에 대한 쓰기 작업의 타임라인입니다.
대상 읽기
시간 T
데이터 상태
기본
t 이전 3
데이터는 이전쓰기를 반영합니다.
기본
t 이후 3
데이터는 쓰기 0을반영합니다.
중고등 교육 1
t 이전 5
데이터는 이전쓰기를 반영합니다.
중고등 교육 1
t 이후 5
데이터는 쓰기 0을반영합니다.
중고등 교육 2
t 이전 또는 t 6
데이터는 이전쓰기를 반영합니다.
중고등 교육 2
t 이후 6
데이터는 쓰기 0을반영합니다.

읽기 고려 "majority" 는 WiredTiger 스토리지 엔진에 사용할 수 있습니다.

serverStatus 명령은 스토리지 엔진이 "majority" 읽기 고려를 지원하는지 여부를 나타내는 storageEngine.supportsCommittedReads 필드를 반환합니다.

참고

개별 작업 수준이 아닌 트랜잭션 수준에서 읽기 문제를 설정합니다. 트랜잭션에 대한 읽기 문제를 설정하려면 트랜잭션 및 읽기 문제를 참조하십시오.

다중 문서 트랜잭션 에서 실행되는 작업의 경우, 읽기 고려 "majority" 는 트랜잭션이 쓰기 고려 "majority" 로 커밋되는 경우에만 보장을 제공합니다. 그렇지 않으면 "majority" 읽기 고려가 트랜잭션에서 읽은 데이터에 대한 보장을 제공하지 않습니다.

단계를 포함하는 애그리게이션에 $out 대해 "majority" 읽기 고려 수준 을 지정할 수 있습니다.

버전 3.6에서 변경됨.

MongoDB 3.6부터는 쓰기에서 승인을 요청하는 경우 인과적으로 일관된 세션을 사용하여 자신의 쓰기를 읽을 수 있습니다.

MongoDB 3 이전 버전.6, 자신의 쓰기를 읽으려면 { w: "majority" } 쓰기 고려로 쓰기 작업을 실행한 다음 primary 읽기 설정과 "majority" 또는 "linearizable" 읽기 고려를 사용하여 읽기 작업을 실행해야 합니다.

MongoDB 5.0부터는 스토리지 엔진 개선으로 인해 enableMajorityReadConcern--enableMajorityReadConcern 변경할 수 없으며 항상 true으로 설정됩니다.

이전 버전의 MongoDB에서는 enableMajorityReadConcern--enableMajorityReadConcern 구성할 수 있으며 false으로 설정하여 스토리지 캐시 압력으로 인해 3멤버 PSA(Primary-Secondary-Arbiter) 아키텍처를 사용하는 배포가 고정되지 않도록 방지할 수 있습니다.

프라이머리-세컨더리-중재자(PSA) 아키텍처를 사용 중이라면 다음을 고려하세요.

  • 쓰기 고려 "majority"는 세컨더리를 사용할 수 없거나 지연되었을 때 성능 문제를 일으킬 수 있습니다. 이러한 문제를 완화하는 방법은 PSA 복제본 세트의 성능 문제 완화를 참조하세요.

  • 글로벌 기본값 "majority" 를 사용하고 있고 쓰기 고려가 과반수 크기보다 작으면 쿼리가 오래된 (완전히 복제되지 않은) 부실 데이터를 반환할 수 있습니다.

← readConcern "available"