シャードクラスターインスタンスの各コレクションにシャーディングを設定して、インスタンス内のシャードのストレージスペースを最大限に活用し、これらのシャードのコンピューティングパフォーマンスを最大化できます。
背景情報
コレクションがシャードされていない場合、コレクション内のすべてのデータは同じシャードノードに格納されます。 この場合、他のシャードのストレージスペースを完全に使用することができず、これらのシャードのコンピューティングパフォーマンスが低下します。
前提条件
インスタンスはシャードクラスタインスタンスです。
使用上の注意
シャーディング後、構成済みのシャードキーを変更または削除することはできません。
シャーディングを設定した後、バランサーは指定された条件を満たす既存のデータをシャードし、インスタンスのリソースを消費します。 そのため、ピーク時間外に操作を実行することを推奨します。
説明シャーディングを設定する前に、バランサーの有効期間をオフピーク時間に制限するアクティブな時間枠を設定できます。 詳細については、「balancerのアクティブな時間ウィンドウの設定」をご参照ください。
シャードキーの選択は、シャードクラスタインスタンスのパフォーマンスに影響します。 シャードキーを選択する方法の詳細については、 シャードキー をご参照ください。
シャーディング戦略
シャーディング戦略 | 説明 | シナリオ |
レンジシャーディング | MongoDBは、データをシャードキー値によって決まる連続した範囲に分割します。 各チャンクは、連続するデータ範囲を表す。
| シャードキー値は単調に増加または減少しません。 シャードキーは、カーディナリティが大きく、頻度が低い。 範囲ベースのクエリが必要です。 |
ハッシュシャーディング | MongoDBは、1つのフィールドのハッシュ値をインデックス値として計算し、ハッシュ値の範囲に基づいてデータをチャンクに分割します。
| シャードキー値は単調に増加または減少します。 シャードキーは、カーディナリティが大きく、頻度が低い。 データ書き込みはランダムにシャードに分散されます。 データは高いランダム性で読み出されます。 |
上記の2つのシャーディング戦略に加えて、複合シャードキーを設定することもできます。 たとえば、カーディナリティの低いキーと単調に増加するキーの両方を設定します。 詳細については、「シャードキーの選択」をご参照ください。
手順
次の手順では、例として mongodbtest という名前のデータベースと customer という名前のコレクションを使用します。
シャーディングするコレクションが存在するデータベースのシャーディングを有効にします。
重要インスタンスがMongoDB 6.0以降を実行する場合は、この手順をスキップします。 詳細については、「sh.enableSharding() 」をご参照ください。
sh.enableSharding("<database>")
<database>
: データベースの名前。例:
sh.enableSharding("mongodbtest")
説明sh.status()
コマンドを実行して、シャーディングが有効になっているかどうかを確認できます。シャードキーフィールドにインデックスを作成します。
db.<collection>.createIndex(<keyPatterns>,<options>)
上記のコマンドのパラメータ:
<collection>
: コレクションの名前。<keyPatterns>
: インデックス作成に使用されるフィールドとインデックスタイプ。一般的なインデックスタイプは次のとおりです。
1: 昇順インデックス
-1: 降順インデックス
"hashed": ハッシュインデックス
<options>
: オプションのパラメーター。 詳細については、「db.collection.createIndex() 」をご参照ください。 このフィールドはこの例では使用されません。
昇順インデックスを作成するためのサンプルコマンド:
db.customer.createIndex({name:1})
ハッシュインデックスを作成するためのサンプルコマンド:
db.customer.createIndex({name:"hashed"})
コレクションの分割を設定します。
sh.shardCollection("<database>.<collection>",{ "<key>":<value> } )
上記のコマンドのパラメータ:
<database>
: データベースの名前。<collection>
: コレクションの名前。<key>
: MongoDBがデータのシャードに使用するシャードキー。<value>
1: レンジドシャーディング。 この戦略は、シャードキーに基づく効率的な範囲ベースのクエリをサポートします。
"hashed": ハッシュされたシャーディング。 この戦略は、データ書き込みをシャード間で均等に分散します。
レンジドシャーディングを設定するためのサンプルコマンド:
sh.shardCollection("mongodbtest.customer",{"name":1})
ハッシュシャーディングを設定するためのサンプルコマンド:
sh.shardCollection("mongodbtest.customer",{"name":"hashed"})
次のステップ
インスタンスが実行され、しばらくデータが書き込まれた後、mongo shellでsh.status()
コマンドを実行して、シャード間のデータ分布を表示できます。
db.stats()
コマンドを実行して、各シャードに保存されているデータのサイズを表示することもできます。