readConcern "majority"
다중 문서 트랜잭션과 관련이 없는 읽기 작업의 경우 읽기 고려 "majority"
는 복제본 세트 구성원의 과반수가 읽은 데이터를 승인했음을 보장합니다. 읽은 문서는 내구성이 뛰어나고 롤백되지 않음이 보장됩니다.
다중 문서 트랜잭션에서 실행되는 작업의 경우, 읽기 고려 "majority"
는 트랜잭션이 쓰기 고려 'majority'와 함께 커밋되는 경우에만 보증을 제공합니다. 그렇지 않으면 "majority"
읽기 고려가 트랜잭션에서 읽은 데이터에 대한 보장을 제공하지 않습니다.
읽기 고려 수준에 관계없이 노드의 최신 데이터는 시스템에 있는 데이터의 최신 버전을 반영하지 않을 수 있습니다.
주 서버에 장애가 발생하면 어떻게 되는지에 대한 자세한 내용은 자동 페일오버를참조하십시오.
성능
각 복제본 세트 멤버는 과반수 커밋 포인트의 데이터 뷰를 메모리에 유지하며, 과반수 커밋 포인트는 프라이머리에서 계산합니다. 읽기 고려 "majority"
를 해결하기 위해 노드는 이 뷰에서 데이터를 반환하며 성능 측면에서 다른 읽기 고려와 비슷합니다.
가용성
읽기 고려 "majority"
는 인과적으로 일관된 세션 및 트랜잭션 유무에 관계없이 사용할 수 있습니다.
경고
프라이머리-세컨더리-중재자(PSA) 아키텍처를 사용 중이라면 다음을 고려하세요.
쓰기 고려
"majority"
는 세컨더리를 사용할 수 없거나 지연되었을 때 성능 문제를 일으킬 수 있습니다. 이러한 문제를 완화하는 방법에 대한 조언은 자체 관리 PSA 복제본 세트를 통한 성능 문제 완화를참조하세요.글로벌 기본값
"majority"
를 사용하고 있고 쓰기 고려가 과반수 크기보다 작으면, 쿼리가 오래된 (완전히 복제되지 않은) 부실 데이터를 반환할 수 있습니다.
예시
세 멤버로 구성된 복제본 세트에 0을 쓰는 쓰기 작업의 다음 타임라인을 고려해 보십시오.
참고
단순화를 위해 이 예시에서는 다음과 같은 상황을 가정합니다.
쓰기 0 이전의 모든 쓰기가 모든 구성원에 성공적으로 복제되었습니다.
쓰기 이전은 쓰기 0 이전의 이전 쓰기입니다.
Write 0 이후에는 다른 쓰기가 발생하지 않았습니다.
시간 | 이벤트 | 가장 최근 글 | 가장 최근 w: "대다수" 쓰기 |
---|---|---|---|
t 0 | 기본 적용 쓰기 0 | Primary: Write 0 Secondary 1: Write prev Secondary 2: Write prev | Primary: Write prev Secondary 1: Write prev Secondary 2: Write prev |
t 1 | 보조 1은 쓰기 0을적용합니다. | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write prev | Primary: Write prev Secondary 1: Write prev Secondary 2: Write prev |
티 2 | 보조 2 는 쓰기 0을 적용합니다. | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write prev Secondary 1: Write prev Secondary 2: Write prev |
t 3 | 프라이머리는 세컨더리 1에 성공적으로 복제되었음을 알리고 클라이언트에 확인 메시지를 보냅니다. | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write 0 Secondary 1: Write prev Secondary 2: Write prev |
t 4 | 주 서버가 보조 서버 2로복제가 성공했음을 인식합니다. | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write 0 Secondary 1: Write prev Secondary 2: Write prev |
t 5 | 보조 1은 (정기적인 복제 메커니즘을 통해) 가장 최근의 w에 대한 스냅샷을 업데이트하라는 알림을 받습니다. "majority" 쓰기 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write prev |
t 6 | 보조 2는 (정기적인 복제 메커니즘을 통해) 가장 최근의 w에 대한 스냅샷을 업데이트하라는 알림을 받습니다. "majority" 쓰기 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 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
단계를 포함하는 집계에 대해 읽기 고려(read concern) 수준을 "majority"
지정할 수 있습니다.
자체 쓰기 읽기
쓰기에서 승인을 요청하는 경우 인과적으로 일관된 세션을 사용하여 자신의 쓰기를 읽을 수 있습니다.
기본-보조-아비터 복제본 세트
MongoDB 5.0부터는 스토리지 엔진 개선으로 인해 enableMajorityReadConcern
및 --enableMajorityReadConcern
는 변경할 수 없으며 항상 true
으로 설정됩니다.
이전 버전의 MongoDB에서는 enableMajorityReadConcern
및 --enableMajorityReadConcern
를 구성할 수 있으며 false
으로 설정하여 스토리지 캐시 압력으로 인해 3멤버 PSA(Primary-Secondary-Arbiter) 아키텍처를 사용하는 배포가 고정되지 않도록 방지할 수 있습니다.
프라이머리-세컨더리-중재자(PSA) 아키텍처를 사용 중이라면 다음을 고려하세요.
쓰기 고려
"majority"
는 세컨더리를 사용할 수 없거나 지연되었을 때 성능 문제를 일으킬 수 있습니다. 이러한 문제를 완화하는 방법에 대한 조언은 자체 관리 PSA 복제본 세트를 통한 성능 문제 완화를참조하세요.글로벌 기본값
"majority"
를 사용하고 있고 쓰기 고려가 과반수 크기보다 작으면, 쿼리가 오래된 (완전히 복제되지 않은) 부실 데이터를 반환할 수 있습니다.