readConcern "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" 로 커밋되는 경우에만 보장을 제공합니다. 그렇지 않으면 "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"
를 사용하고 있고 쓰기 고려가 과반수 크기보다 작으면 쿼리가 오래된 (완전히 복제되지 않은) 부실 데이터를 반환할 수 있습니다.