Docs Menu
Docs Home
/
MongoDBマニュアル
/ /

シャーディングされたクラスターで範囲を作成

項目一覧

  • 手順
  • 結果
  • 次のステップ
  • 詳細

ほとんどの場合、 のシャーディングされたクラスターは、ユーザーの介入なしに自動的に範囲の作成、分裂、分散を行います。ただし、場合によっては、 MongoDBでは十分な範囲を作成したり、必要なスループットをサポートするのに十分な速度でデータを分散したりできない場合があります。

例、シャード全体に挿入を分散しているクラスターに大量のデータを取り込む場合は、空のシャーディングされたコレクションの範囲を事前分割すると、スループットが向上します。

注意

あるいは、空のコレクションまたは存在しないコレクションをシャーディングする 前に ゾーンとゾーンの範囲 を定義することで、シャード コレクション操作は定義されたゾーン範囲の範囲と、シャードキー値の全範囲をカバーする追加の範囲を作成し、ゾーン範囲に基づく初期範囲分散。For more information, see Empty Collection.

警告

空のコレクションの範囲のみを事前分割します。 入力されるコレクションの範囲を手動で分割すると、予測できない範囲とサイズだけでなく、バランシング動作が非効率的または非効果的になる可能性があります。

1

// 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

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

注意

3

ステップ 0}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 コマンドは、クラスター内のシャード全体に空の範囲を分散します。クラスターは一括挿入用に最適化されました。

パフォーマンスをさらに向上させるには、アプリケーションの一般的なクエリをサポートするための追加のインデックスを作成します。

戻る

データのパーティショニング