シャードクラスタインスタンス内のデータベースの収集レベルでシャードを構成して、ストレージスペースを最大限に活用し、シャードクラスタ内のシャードのコンピューティングパフォーマンスを最大化することができます。
注意事項
- この操作は、シャードクラスタインスタンスにのみ適用されます。
- シャードを構成後、balancer は指定された基準を満たす既存のデータを分割します。 分割はインスタンスのパフォーマンスに影響するため、この操作はオフピーク期間に実行することをお勧めします。
- 分割後に構成されたシャードキーを変更することはできません。
- シャードキーの選択は、シャードクラスタインスタンスのパフォーマンスに影響します。 シャードキーの選択方法の詳細は、Shard Keys をご参照ください。
- 分割を構成しない場合、データは PrimaryShard に書き込まれます。 この場合、同じシャードクラスター内のストレージスペースを最大限に活用できず、他のシャードのコンピューティングパフォーマンスを最大化することはできなくなります。
手順
次の手順では、例として mongodbtest という名前のデータベースと customer という名前のコレクションを使用します。
- mongo shell を介したシャードクラスタインスタンスへの接続。
- 分割対象のコレクションが配置されているデータベースの分割機能を有効にします。
sh.enableSharding("<database>")
上記のコマンドで、<database>はデータベース名を示します。
例:sh.enableSharding("mongodbtest")
注 分割ステータスを確認するには、sh.status()
コマンドを実行します。 - コレクション内のフィールドにインデックスを作成します。
db.<collection>.createIndex(<keys>,<options>)
注釈:- <collection>:コレクション名。
- <keys>:インデックス作成のためのフィールド及びソート方法が含まれます。
1:フィールドの昇順インデックスを示します。 -1 :フィールドの降順インデックスを示します。
- <options>:追加オプション。 詳細は、db.collection.createIndex()をご参照ください。 この例では、このパラメータは使用されていません。
例:db.customer.createIndex({"name":1})
- コレクションの分割を設定します。
sh.shardCollection("<database>.<collection>",{ "<key>":<value> } )
注釈:- <database>:データベース名。
- <collection>:コレクション名。
- <key>:ApsaraDB for MongoDB がデータを断片化するためのシャードキー。
- <value>:
- 1:シャードキーの昇順インデックスを示します。これは、シャードキーに基づく範囲クエリを適切にサポートできます。
- -1:シャードキーの降順のインデックスを示します。これは、シャードキーに基づく範囲クエリを適切にサポートできます。
- hashed:hash シャードキーを示します。これは、さまざまなシャードにデータを均等に書き込むために使用できます。
例:sh.shardCollection("mongodbtest.customer",{"name":1})
このコレクションにデータベース内のデータが含まれている場合、バックエンド balancer は構成後に自動的にデータを分割できます。 分割プロセスはお客様が意識することはありません。
その他操作
データベースが稼働し、データがしばらく書き込まれた後で、mongo shell で
sh.status()
コマンドを実行すると、分割の構成と分割のチャンク情報を確認できます。 また、
db.stats()
コマンドを実行して、さまざまなシャード上でこのデータベースのデータストレージをチェックすることができます。