분산된 쿼리
복제본 세트에 대한 읽기 작업
기본적으로 클라이언트는 복제본 세트의 프라이머리 에서 읽습니다. 그러나 클라이언트는 읽기 설정 을 지정하여 다른 멤버에게 읽기 작업을 지시할 수 있습니다. 예를 들어, 클라이언트는 세컨더리 또는 가장 가까운 멤버로부터 다음을 읽도록 읽기 설정을 구성할 수 있습니다.
멀티 데이터 센터 배포서버에서 지연 시간을 줄이고,
높은 읽기 볼륨(쓰기 볼륨 대비)을 분산하여 읽기 처리량을 개선하고,
백업 작업을 수행하고 또는
새로운 프라이머리가 선택될 때까지 읽기를 허용합니다.
복제본 세트의 세컨더리 멤버에 읽기 작업을 수행할 경우 프라이머리 멤버의 현재 상태가 반영되지 않을 수 있습니다. 읽기 작업을 다른 서버로 보내는 읽기 설정으로 인해 단조롭지 않은 읽기가 발생할 수 있습니다.
버전 3.6에서 변경됨: MongoDB 3.6 부터 클라이언트는 인과적으로 일관적인 세션을 사용할 수 있으며, 이는 단조적 읽기를 포함한 다양한 보장을 제공합니다.
연결별 또는 작업별로 읽기 설정을 구성할 수 있습니다. 읽기 설정 또는 읽기 설정 모드에 대한 자세한 내용은 읽기 설정 및 읽기 설정 모드를 참조하세요.
복제본 세트에 대한 쓰기 작업
복제본 세트에서 모든 쓰기 작업은 세트의 프라이머리로 이동합니다. 프라이머리는 쓰기 작업을 적용하고 프라이머리의 작업 로그 또는 oplog에 작업을 기록합니다. oplog는 데이터 세트에 대한 재현 가능한 작업 시퀀스입니다. 세트의 세컨더리 멤버는 계속해서 oplog를 복제하고 비동기 프로세스에서 작업을 자신에게 적용합니다.
샤드 클러스터에 대한 읽기 작업
샤드 클러스터를 사용하면 애플리케이션에 거의 영향을 미치지 않는 방식으로 mongod
인스턴스의 클러스터 간에 데이터 세트를 분할할 수 있습니다. 샤드 클러스터에 대한 개요는 이 매뉴얼의 샤딩 섹션을 참조하세요.
샤드 클러스터의 경우 애플리케이션은 클러스터와 연결된 mongos
인스턴스 중 하나에 작업을 실행합니다.
샤드 클러스터에 대한 읽기 작업은 특정 샤드로 전달될 때 가장 효율적입니다. 샤드 컬렉션에 대한 쿼리에는 컬렉션의 샤드 키가 포함되어야 합니다. 쿼리에 샤드 키가 포함된 경우 mongos
는 config 데이터베이스의 클러스터 메타데이터를 사용하여 쿼리를 샤드로 라우팅할 수 있습니다.
쿼리에 샤드 키가 포함되지 않은 경우 mongos
는 클러스터의 모든 샤드로 쿼리를 전달해야 합니다. 이러한 분산 수집 쿼리는 비효율적일 수 있습니다. 대규모 클러스터에서는 일상적인 작업에서 분산 수집 쿼리를 사용할 수 없습니다.
복제본 세트 샤드의 경우, 복제본 세트의 세컨더리 멤버에 읽기 작업을 수행할 경우 프라이머리 멤버의 현재 상태가 반영되지 않을 수 있습니다. 읽기 작업을 다른 서버로 보내는 읽기 설정으로 인해 비단조적 읽기가 발생할 수 있습니다.
참고
MongoDB 3.6부터
클라이언트는 인과적으로 일관된 세션을 사용할 수 있으며, 이는 단조적 읽기를 포함한 다양한 보장을 제공합니다.
프라이머리뿐만 아니라 샤드 복제본 세트의 모든 멤버가 청크 메타데이터와 관련된 메타데이터를 유지합니다. 이렇게 하면 읽기 고려
"available"
을 사용하지 않는 경우 세컨더리에서 읽기가 고아 데이터를 반환하는 것을 방지할 수 있습니다. 이전 버전에서는 읽기 고려와 관계없이 세컨더리에서 읽기가 연결이 끊긴 문서를 반환할 수 있었습니다.
샤드 클러스터에 대한 쓰기 작업
샤드 클러스터의 샤드 collection의 경우, mongos
은(는) 애플리케이션에서 데이터 세트의 특정 부분을 담당하는 샤드로 쓰기 작업을 지시합니다. mongos
은(는) 데이터베이스 구성의 클러스터 메타데이터를 사용하여 쓰기 작업을 적절한 샤드로 라우팅합니다.
MongoDB는 샤드 키의 값에 따라 샤드 컬렉션의 데이터를 범위로 분할합니다. 그런 다음 MongoDB는 이러한 청크를 샤드에 배포합니다. 샤드 키는 청크를 샤드에 분배하는 방법을 결정합니다. 이는 클러스터의 쓰기 작업 성능에 영향을 미칠 수 있습니다.
중요
삽입할 때마다 샤드 키 값이 증가하거나 감소하는 경우 모든 삽입 작업은 단일 샤드를 대상으로 합니다. 결과적으로 단일 샤드의 용량은 샤드 클러스터의 삽입 용량에 대한 제한이 됩니다.