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

영역

이 페이지의 내용

  • 동작 및 작업

샤드 클러스터에서는 샤드 키 를 기반으로 샤드 데이터의구역 을 만들 수 있습니다. 각 구역을 클러스터에 있는 하나 이상의 샤드와 연결할 수 있습니다. 샤드는 여러 개의 구역과 연결할 수 있습니다. 균형 잡힌 클러스터에서 MongoDB는 구역에 포함된 청크 를 해당 구역과 연결된 샤드로만 마이그레이션합니다.

구역을 적용할 수 있는 몇 가지 일반적인 배포 패턴은 다음과 같습니다.

  • 특정 샤드 세트에서 데이터의 특정 하위 집합을 격리합니다.

  • 가장 관련성이 높은 데이터가 애플리케이션 서버와 지리적으로 가장 가까운 샤드에 있는지 확인합니다.

  • 샤드 하드웨어의 하드웨어/성능을 기반으로 데이터를 샤드로 라우팅합니다.

다음 이미지는 3개의 샤드와 2개의 구역이 있는 샤드 클러스터를 보여줍니다. A 구역은 하한이 1이고 상한이 10인 범위를 나타냅니다. B 구역은 하한이 10이고 상한이 20인 범위를 나타냅니다. 샤드 AlphaBeta에는 A 구역이 있습니다. 샤드 Beta에도 B 구역이 있습니다. 샤드 Charlie에 연결된 구역이 없습니다. 클러스터는 안정된 상태이며 구역을 위반하는 청크는 없습니다.

샤드 클러스터의 구역을 기반으로 하는 데이터 분포 다이어그램
클릭하여 확대

각 구역은 collection의 샤드 키 값 중 하나 이상의 범위를 포함합니다. 구역이 포함하는 각 범위는 항상 하한선를 포함하며 상한선은 제외합니다. 구역은 범위를 공유할 수 없으며 범위가 중복될 수도 없습니다.

예를 들어 {"x": 1}에 있는 샤드 키를 생각해 보겠습니다. 클러스터의 구역 범위는 다음과 같습니다.

{ "x" : 5 } --> { "x" : 10 } // Zone A
{ "x" : 10} --> { "x" : 20 } // Zone B
  • 샤드 키 값이 7인 문서가 구역 A로 라우팅됩니다.

  • 샤드 키 값이 10인 문서가 구역 B로 라우팅됩니다.

샤드 키에 해시 필드가 포함된 collection의 경우 해당 필드의 구역 범위와 데이터 분포는 해시 값을 기반으로 합니다. 이 구역에는 해시 샤드 키 값이 정의된 범위에 속하는 문서가 포함되어 있습니다. 해시 필드의 구역 범위는 해시되지 않은 필드의 구역 범위와 예측 가능한 문서 라우팅 동작이 동일하지 않습니다.

예를 들어 {"x" : "hashed"}에 있는 샤드 키를 가정해 보겠습니다. 다음 범위는 5부터 10 사이의 해시된 범위를 나타냅니다.

{ "x": NumberLong("4470791281878691347") } --> { "x": NumberLong("7766103514953448109") } // Zone A
  • 샤드 키 값이 1인 문서는 해시1이 정의된 범위에 속하기 때문에 역 A로 라우팅됩니다.

  • 샤드 키 값이 15인 문서는 해시15이 정의된 범위에 속하기 때문에 역 A로 라우팅됩니다.

  • 샤드 키 값이 8인 문서는 해시8이 정의된 범위에 속하지 않기 때문에 구역 A로 라우팅되지 않습니다.

mongosh는 지정된 매개변수의 포스트 해시 값을 계산하기 위한 convertShardKeyToHashed()를 제공합니다.

해시 필드에서 구역 범위를 사용하는 한 가지 유효한 방법은 컬렉션의 데이터를 단일 구역의 샤드로 제한하는 것입니다. MinKey를 하한으로, MaxKey를 상한으로 사용하여 가능한 해시 샤드 키 값의 전체 범위를 포괄하는 구역 범위를 생성합니다.

범위를 정의하기 위해 MongoDB는 updateZoneKeyRange 명령과 관련 헬퍼 메서드 sh.updateZoneKeyRange()sh.addShardTag()를 제공합니다.

MongoDB 4.0.2부터 updateZoneKeyRange 데이터베이스 명령과 해당 헬퍼 sh.updateZoneKeyRange()sh.addTagRange()를 비샤드형 컬렉션 또는 존재하지 않는 컬렉션에서 실행할 수 있습니다.

컬렉션을 삭제하면 관련된 영역/태그 범위가 삭제됩니다.

버전 4.0.3에서 변경된 사항: 샤드 컬렉션 작업은 비어 있거나 존재하지 않는 컬렉션을 샤딩하기 전에 구역 및 구역 범위를 정의하여 정의된 구역 범위에 대한 청크와 샤드 키 값의 전체 범위를 포함하는 추가 청크를 생성하고, 구역 범위를 기반으로 초기 청크 분배를 수행합니다. 이러한 청크의 초기 생성 및 분배를 통해 구역별 샤딩을 더 빠르게 설정할 수 있습니다. 초기 분배 이후에는 밸런서가 앞으로의 청크 분배를 관리합니다.

MongoDB는 복합 해시 인덱스에 대한 샤딩 컬렉션을 지원합니다. 복합 해시 샤드 키를 사용하여 비어 있거나 존재하지 않는 컬렉션을 샤딩하는 경우 MongoDB가 초기 청크 생성 및 분산을 수행하려면 추가 요구 사항이 적용됩니다.

예시는 비어 있거나 존재하지 않는 컬렉션에 대한 구역 및 구역 범위 사전 정의를 참조하세요.

다음도 참조하세요.

밸런서는 샤딩된 collection의 청크를 클러스터의 모든 샤드에 균등하게 분배하려고 시도합니다.

마이그레이션으로 표시된 각 청크에 대해 밸런서는 구성된 모든 구역의 가능한 각 대상 샤드를 확인합니다. 청크 범위가 구역에 속하면 밸런서는 청크를 해당 구역 내부의 샤드로 마이그레이션합니다. 구역에 속하지 않는 청크는 cluster의 모든 샤드에 존재할 수 있으며 정상적으로 마이그레이션됩니다.

밸런싱 라운드 중에 밸런서가 특정 샤드에 대해 구성된 구역을 위반하는 청크를 감지하면 밸런서는 해당 청크를 충돌이 없는 샤드로 마이그레이션합니다.

구역을 샤드와 연결하고 샤드 컬렉션에 대한 샤드 키 범위로 구역을 구성한 후 클러스터가 샤드 컬렉션에 대해 영향을 받는 데이터를 마이그레이션하는 데 시간이 걸릴 수 있습니다. 이는 청크의 분할과 클러스터의 현재 데이터 분산에 따라 달라집니다. 밸런싱이 완료되면 특정 구역의 문서에 대한 읽기 및 쓰기가 해당 구역 내의 샤드에만 라우팅됩니다.

일단 구성되면 밸런서는 향후 밸런싱 라운드 동안 구역을 존중합니다.

다음도 참조하세요.

포함할 구역에 대한 새 범위를 정의할 때 샤드 키에 포함된 필드를 사용해야 합니다. 복합 샤드 키를 사용하는 경우, 범위에는 샤드 키의 접두사가 포함되어야 합니다.

예를 들어, 샤드 키 { a : 1, b : 1, c : 1 }가 주어진 경우 b의 값을 포함하도록 범위를 만들거나 업데이트하려면 접두사로 a를 포함해야 합니다. c 값을 포함하도록 범위를 만들거나 업데이트하려면 접두사로 ab를 포함해야 합니다.

샤드 키에 포함되지 않은 필드를 사용하여 범위를 생성할 수 없습니다. 예를 들어, 구역을 사용하여 지리적 위치를 기반으로 데이터를 분할하려는 경우, 샤드 키의 첫 번째 필드에 지리적 데이터가 포함되어야 합니다.

컬렉션에 대한 샤드 키를 선택할 때 구역 구성에 사용할 수 있는 필드를 고려하는 것이 좋습니다. 샤드 키 선택 시 고려할 사항은 샤드 키 선택을 참조하세요.

구역 범위는 항상 하한 경계를 포함하고 상한 경계를 제외합니다.

다음도 참조하세요.

← 샤딩된 cluster 배포

이 페이지의 내용