문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

분산된 쿼리

이 페이지의 내용

  • 복제본 세트에 대한 읽기 작업
  • 복제본 세트에 대한 쓰기 작업
  • 샤드 클러스터에 대한 읽기 작업
  • 샤드 클러스터에 대한 쓰기 작업
  • 스트림 및 고아 문서 변경

기본적으로 클라이언트는 복제본 세트의 프라이머리에서 읽지만, 클라이언트는 읽기 설정을 지정하여 다른 멤버에 읽기 작업을 지시할 수 있습니다. 예를 들어 클라이언트는 세컨더리 또는 가장 가까운 멤버로부터 다음을 읽도록 읽기 설정을 구성할 수 있습니다.

  • 멀티 데이터 센터 배포서버에서 지연 시간을 줄이고,

  • 높은 읽기 볼륨(쓰기 볼륨 대비)을 분산하여 읽기 처리량을 개선하고,

  • 백업 작업을 수행하고 또는

  • 새로운 프라이머리가 선택될 때까지 읽기를 허용합니다.

복제본 세트에 대한 읽기 작업. 기본 읽기 설정은 읽기를 기본값으로 프라이머리 멤버로 라우팅합니다. 'nearest' 읽기 설정은 읽기를 가장 가까운 멤버로 라우팅합니다.
클릭하여 확대

복제본 세트의 세컨더리 멤버에 읽기 작업을 수행할 경우 프라이머리 멤버의 현재 상태가 반영되지 않을 수 있습니다. 읽기 작업을 다른 서버로 보내는 읽기 설정으로 인해 단조롭지 않은 읽기가 발생할 수 있습니다.

클라이언트는 인과적으로 일관된 세션을 사용할 수 있으며, 이는 단조적 읽기를 포함한 다양한 보장을 제공합니다.

연결별 또는 작업별로 읽기 설정을 구성할 수 있습니다. 읽기 설정 또는 읽기 설정 모드에 대한 자세한 내용은 읽기 설정읽기 설정 모드를 참조하세요.

복제본 세트에서 모든 쓰기 작업은 세트의 프라이머리로 이동합니다. 프라이머리는 쓰기 작업을 적용하고 프라이머리의 작업 로그 또는 oplog에 작업을 기록합니다. oplog는 데이터 세트에 대한 재현 가능한 작업 시퀀스입니다. 세트의 세컨더리 멤버는 계속해서 oplog를 복제하고 비동기 프로세스에서 작업을 자신에게 적용합니다.

기본 멤버로의 읽기 및 쓰기 기본 라우팅을 나타낸 다이어그램
클릭하여 확대

복제본 세트 및 쓰기 작업에 대한 자세한 내용은 복제쓰기 고려를 참조하세요.

샤드 클러스터를 사용하면 애플리케이션에 거의 영향을 미치지 않는 방식으로 mongod 인스턴스의 클러스터 간에 데이터 세트를 분할할 수 있습니다. 샤드 클러스터에 대한 개요는 이 매뉴얼의 샤딩 섹션을 참조하세요.

샤드 클러스터의 경우 애플리케이션은 클러스터와 연결된 mongos 인스턴스 중 하나에 작업을 실행합니다.

샤드 클러스터 다이어그램.
클릭하여 확대

샤드 클러스터에 대한 읽기 작업은 특정 샤드로 전달될 때 가장 효율적입니다. 샤드 컬렉션에 대한 쿼리에는 컬렉션의 샤드 키가 포함되어야 합니다. 쿼리에 샤드 키가 포함된 경우 mongosconfig 데이터베이스의 클러스터 메타데이터를 사용하여 쿼리를 샤드로 라우팅할 수 있습니다.

샤드 클러스터에 대한 읽기 작업. 쿼리 기준에는 샤드 키가 포함됩니다. 쿼리 라우터 ``mongos``는 쿼리를 적절한 샤드 또는 샤드들로 지정할 수 있습니다.

쿼리에 샤드 키가 포함되지 않은 경우 mongos는 클러스터의 모든 샤드로 쿼리를 전달해야 합니다. 이러한 분산 수집 쿼리는 비효율적일 수 있습니다. 대규모 클러스터에서는 일상적인 작업에서 분산 수집 쿼리를 사용할 수 없습니다.

샤드 클러스터에 대한 읽기 작업. 쿼리 기준에는 샤드 키가 포함되지 않습니다. 쿼리 라우터 ``mongos``는 컬렉션의 모든 샤드에 쿼리를 브로드캐스트해야 합니다.

복제본 세트 샤드의 경우, 복제본 세트의 세컨더리 멤버에 읽기 작업을 수행할 경우 프라이머리 멤버의 현재 상태가 반영되지 않을 수 있습니다. 읽기 작업을 다른 서버로 보내는 읽기 설정으로 인해 비단조적 읽기가 발생할 수 있습니다.

참고

  • 클라이언트는 인과적으로 일관된 세션을 사용할 수 있으며, 이는 단조적 읽기를 포함한 다양한 보장을 제공합니다.

  • 프라이머리뿐만 아니라 샤드 복제본 세트의 모든 멤버가 청크 메타데이터와 관련된 메타데이터를 유지합니다. 이렇게 하면 읽기 고려 "available"을 사용하지 않는 경우 세컨더리에서 읽기가 고아 데이터를 반환하는 것을 방지할 수 있습니다. 이전 버전에서는 읽기 고려와 관계없이 세컨더리에서 읽기가 연결이 끊긴 문서를 반환할 수 있었습니다.

샤드 클러스터의 읽기 작업에 대한 자세한 내용은 mongos샤드 키 섹션을 참조하세요.

샤드 클러스터의 샤드 collection의 경우, mongos은(는) 애플리케이션에서 데이터 세트의 특정 부분을 담당하는 샤드로 쓰기 작업을 지시합니다. mongos은(는) 데이터베이스 구성의 클러스터 메타데이터를 사용하여 쓰기 작업을 적절한 샤드로 라우팅합니다.

샤드 클러스터 다이어그램.
클릭하여 확대

MongoDB는 샤드 키의 값에 따라 샤드 컬렉션의 데이터를 범위로 분할합니다. 그런 다음 MongoDB는 이러한 청크를 샤드에 배포합니다. 샤드 키는 청크를 샤드에 분배하는 방법을 결정합니다. 이는 클러스터의 쓰기 작업 성능에 영향을 미칠 수 있습니다.

더 작은 범위 또는 청크로 분할된 샤드 키 값 공간의 다이어그램.

중요

단일 문서에 영향을 주는 업데이트 작업에는 반드시 샤드 키 또는 _id 필드가 포함되어야 합니다. 여러 문서에 영향을 미치는 업데이트는 경우에 따라 샤드 키가 있는 경우 더 효율적이지만 모든 샤드에 브로드캐스트될 수 있습니다.

삽입할 때마다 샤드 키 값이 증가하거나 감소하는 경우 모든 삽입 작업은 단일 샤드를 대상으로 합니다. 결과적으로 단일 샤드의 용량은 샤드 클러스터의 삽입 용량에 대한 제한이 됩니다.

자세한 내용은 샤딩대량 쓰기 작업을 참조하세요.

다음도 참조하세요.

MongoDB 5.3부터는 범위 마이그레이션 중에 고아 문서의 업데이트에 대한 변경 스트림 이벤트가 생성되지 않습니다.

← 원자성과 트랜잭션