Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

샤딩된 클러스터에서 범위 만들기

이 페이지의 내용

  • 단계
  • 결과
  • 다음 단계
  • 자세히 알아보기

대부분의 상황에서 샤딩된 클러스터 는 사용자 개입 없이 자동으로 범위를 생성, 분할 및 배포합니다. 그러나 경우에 따라 MongoDB 는 필요한 처리량 을 지원 만큼 충분한 범위를 생성하거나 데이터를 빠르게 배포할 수 없습니다.

예를 예시 , 샤드에 삽입물이 분산된 된 클러스터 로 대량의 데이터를 수집하려는 경우 빈 샤딩된 컬렉션 의 범위를 사전 분할 하면 처리량 이 향상될 수 있습니다.

참고

또는 비어 있거나 존재하지 않는 컬렉션을 샤딩하기 전에 영역 및 영역 범위를 정의하여 샤드 컬렉션 작업에서 정의된 영역 범위와 샤드 키 값의 전체 범위를 포함하는 추가 범위를 생성하고 영역 범위를 기반으로 초기 범위 분배를 수행합니다. 자세한 내용은 빈 컬렉션을 참조하세요.

경고

빈 컬렉션의 경우 사전 분할된 범위만 해당됩니다. 채워진 컬렉션의 범위를 수동으로 분할하면 범위와 크기를 예측할 수 없을 뿐만 아니라, 비효율적이거나 비효과적인 밸런싱 동작이 발생할 수 있습니다.

다음 예시 에서는 범위를 수동으로 생성하고 배포하는 방법을 보여 줍니다. 이 예시 에서는 sample.documents 네임스페이스 의 컬렉션 을 사용하고 email 필드 에서 해당 컬렉션 을 샤딩합니다.

1

샤드 키 범위를 정의하는 함수를 만듭니다. 이 예시 에서는 email 이 샤드 키 사용되므로 가능한 이메일 주소를 기반으로 범위를 생성합니다.

// Generate two character prefix email ranges.
function getRanges(shards) {
let ranges = [];
// The total number of prefix possibilities is 26 * 26 (aa to zz).
// We calculate the number of combinations to add in a range.
const totalCombinationsPerShard = 26 * 26 / shards.length;
let minKey = {
email: MinKey
};
let maxKey = {
email: MinKey
};
for(let i = 1; i <= shards.length; ++i) {
// 97 is lower case 'a' in ASCII.
let prefix = 97 + ((totalCombinationsPerShard*i)/26);
let suffix = 97 + ((totalCombinationsPerShard*i)%26);
let initialChars = String.fromCharCode(prefix) + String.fromCharCode(suffix);
minKey = maxKey;
maxKey = {
email: i !== shards.length ? initialChars : MaxKey
};
ranges.push({
min: minKey,
max: maxKey
});
}
return ranges;
}
2

sample.documents 컬렉션 을 샤드 하려면 다음 명령을 실행 합니다.

db.adminCommand( {
shardCollection: 'sample.documents',
key: {
email: 1
}
} );

참고

컬렉션 이 비어 있으므로 shardCollection 명령은 샤드 키 를 지원 하기 위해 email 필드 에 인덱스 를 자동으로 생성합니다.

3

1단계에서 정의된 범위에 샤드를 할당하려면 다음 명령을 실행 합니다.

const shards = db.adminCommand({
listShards: 1
}).shards;
let ranges = getRanges(shards);
for (let i = 0; i < ranges.length; ++i) {
db.adminCommand({
moveRange: 'sample.documents',
min: ranges[i].min,
max: ranges[i].max,
toShard: shards[i]._id
});
}

moveRange 명령은 클러스터 의 샤드 전체에 빈 범위를 분산합니다. 이제 클러스터 가 대량 삽입에 최적화되었습니다.

성능을 더욱 향상시키려면 애플리케이션의 일반적인 쿼리를 지원 추가 인덱스를 생성하세요.

돌아가기

데이터 분할