Docs Menu
Docs Home
/
MongoDB 매뉴얼
/

Zones

이 페이지의 내용

  • 동작 및 작업

샤딩된 클러스터에서는 샤드 키 를 기반으로 샤딩된 데이터의구역 을 만들 수 있습니다. 각 구역 을 클러스터 에 있는 하나 이상의 샤드와 연결할 수 있습니다. 샤드 는 여러 개의 구역과 연결할 수 있습니다. 균형 잡힌 클러스터 에서 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()를 제공합니다.

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

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

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

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

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

다음도 참조하세요.

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

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

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

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

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

다음도 참조하세요.

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

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

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

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

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

다음도 참조하세요.

돌아가기

범위 지정된 샤딩

이 페이지의 내용