In sharded clusters, you can create zones that represent a group of shards and associate one or more ranges of shard key values to that zone. MongoDB routes reads and writes that fall into a zone range only to those shards inside of the zone.
팁
샤드 컬렉션 작업은 비어 있거나 존재하지 않는 컬렉션을 샤딩하기 전에 구역 및 구역 범위를 정의하여 정의된 구역 범위에 대한 청크와 샤드 키 값의 전체 범위를 포함하는 추가 청크를 생성하고 그역 범위를 기반으로 초기 청크 분배를 수행합니다. 이러한 청크의 초기 생성 및 배포를 통해 샤딩을 더 빠르게 설정할 수 있습니다. 초기 분배 이후에는 밸런서가 앞으로의 청크 분배를 관리합니다.
예시 는 비어 있거나 존재하지 않는 컬렉션에 대한 구역 및 구역 범위 사전 정의를 참조하세요.
구역에 샤드 추가
mongos 인스턴스에 연결된 경우, sh.addShardToZone() 메서드를 사용하여 구역을 특정 샤드와 연결합니다. 단일 샤드에 여러 개의 구역이 있을 수 있으며, 여러 개의 샤드에 동일한 구역이 있을 수도 있습니다.
예시
다음 예시에서는 구역 NYC를 두 개의 샤드에 추가하고, 구역 SFO 및 NRT를 세 번째 샤드에 추가합니다.
sh.addShardToZone("shard0000", "NYC") sh.addShardToZone("shard0001", "NYC") sh.addShardToZone("shard0002", "SFO") sh.addShardToZone("shard0002", "NRT")
샤드에서 NRT 구역을 제거하는 다음 예시에서처럼, mongos 인스턴스에 연결된 경우 sh.removeShardFromZone() 메서드를 사용하여 특정 샤드에서 구역을 제거할 수 있습니다.
sh.removeShardFromZone("shard0002", "NRT")
구역 범위 생성
구역의 샤드 키 범위를 정의하려면 mongos 인스턴스에 연결된 경우 sh.updateZoneKeyRange() 메서드를 사용합니다. 주어진 샤드 키 범위에는 하나의 구역만 할당될 수 있습니다. 정의된 범위는 겹칠 수 없습니다.
예시
records 데이터베이스에 users라는 이름의 컬렉션이 있고, zipcode 필드에 의해 샤딩되어 있다고 가정할 때, 다음 작업에서 할당하는 것은 다음과 같습니다.
맨해튼과 브루클린의 두 가지 우편번호 범위(
NYC구역)샌프란시스코의 한 가지 우편 번호 범위(
SFO구역)
sh.updateZoneKeyRange("records.users", { zipcode: "10001" }, { zipcode: "10281" }, "NYC") sh.updateZoneKeyRange("records.users", { zipcode: "11201" }, { zipcode: "11240" }, "NYC") sh.updateZoneKeyRange("records.users", { zipcode: "94102" }, { zipcode: "94135" }, "SFO")
참고
구역 범위는 항상 하한 경계를 포함하고 상한 경계를 제외합니다.
컬렉션을 제거하면 관련된 영역/태그 범위가 삭제됩니다.
구역 범위 제거
셸 헬퍼 메서드 sh.removeRangeFromZone()을 사용하여 구역에서 범위를 제거합니다.
예시
다음 예시에서는 맨해튼 내 우편번호 범위에 대한 NYC 구역 할당을 제거합니다.
sh.removeRangeFromZone("records.user", {zipcode: "10001"}, {zipcode: "10281"})
참고
컬렉션을 제거하면 관련된 영역/태그 범위가 삭제됩니다.
기존 구역 보기
sh.status()를 사용하여 클러스터의 각 샤드에 연결된 구역을 나열합니다. config 데이터베이스에서 shards 컬렉션을 쿼리하여 샤드 구역을 볼 수도 있습니다.
다음 예시에서는 find() 메서드를 사용하여 NYC 구역이 있는 모든 샤드를 반환합니다.
use config db.shards.find({ tags: "NYC" })
You can find zone ranges for all namespaces in the tags collection of the config database. The output of sh.status() also displays all zone ranges.
다음 예에서는 find() 메서드를 사용하여 NYC 구역에 연결된 모든 범위를 반환합니다.
use config db.tags.find({ tag: "NYC" })