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

ゾーンを使用したコレクションの配布

項目一覧

  • 前提条件
  • Scenario
  • アーキテクチャ
  • Zones
  • シャードキー
  • バランサー
  • 手順
  • 各シャードを適切なゾーンに追加します。
  • 関連するコレクションにゾーン範囲を追加します。
  • コレクションをシャーディングします。
  • 変更を確認します。
  • 詳細

シャーディングされたクラスターでは、 シャードキー に基づきシャーディングされたデータの ゾーン を作成できます。各ゾーンはクラスター内の 1 つまたは複数のシャードに関連付けることができ、 シャードは任意の数のゾーンに関連付けることができます。 MongoDB はバランスの取れたクラスター内で、ゾーンによってカバーされるチャンクをそのゾーンに関連付けられているシャードのみに移行します。

ゾーン シャーディングを使用して、シャーディングされたクラスター全体にコレクションを分散し、各コレクションのデータを保存するシャードを指定できます。 物理リソースや使用可能なメモリなどのシャード プロパティに基づいてコレクションを分散し、各コレクションがそのデータに最適なシャードに保存されるようにします。

Atlas の サンプル データ セット からの映画データを含むコレクションを使用します。

2 つのシャーディングされたコレクションを含むshardDistributionDBというデータベースがあります。

  • bigData、大量のデータが含まれます。

  • manyIndexesは、多数の大きなインデックスを含みます。

各コレクションをシャードのサブセットに制限し、各コレクションがシャードの異なる物理リソースを使用できるようにする場合。

シャーディングされたクラスターには 3 つのシャードがあります。 各シャードには固有の物理リソースがあります。

シャード名
物理リソース

shard0

大メモリ容量

shard1

高速フラッシュ ストレージ

shard2

大メモリ容量高速フラッシュ ストレージ

物理リソースに基づいてコレクションを分散するには、 シャード ゾーン を使用します。 シャード ゾーンは、コレクションをシャードの特定のサブセットに関連付けます。これにより、コレクションのデータを保存するシャードが制限されます。 この例では、2 つのシャード ゾーンが必要です。

ゾーン名
説明
このゾーンのコレクション

HI_RAM

メモリ容量が大きいサーバー。

大きなインデックスを持つコレクションなど、より多くのメモリを必要とするコレクションは、 HI_RAMシャードに含める必要があります。

FLASH

高速ストレージ速度のためのフラッシュドライブを備えたサーバー。

高速データ取得を必要とする大規模なコレクションは、 FLASHシャードに配置する必要があります。

このチュートリアルでは、各コレクションのシャードに使用するシャードキー{ _id: "hashed" }です。 コレクションをシャードする前に、 シャード ゾーン を構成します。 その結果、各コレクションのデータは、対応するゾーン内のシャードにのみ存在します。

ハッシュされたシャーディングでは、ゾーンを設定する前にコレクションをシャーディングする場合、シャーディングが有効になっているときに MongoDB はすべてのシャード間で均等にチャンクを割り当てます。 つまり、チャンクのデータを処理するのに適していないシャードに、チャンクが一時的に割り当てられる場合があります。

バランサーは、設定された ゾーン に基づいて、チャンクを適切なシャードに移行します。 バランシングが完了すると、シャードには、割り当てられたゾーンと一致する範囲を持つチャンクのみが含まれます。

重要

パフォーマンス

ゾーンまたはゾーン範囲を追加、削除、または変更すると、チャンクの移行が発生する可能性があります。 データセットのサイズと、ゾーンまたはゾーン範囲が影響するチャンクの数によっては、これらの移行がクラスターのパフォーマンスに影響を与える可能性があります。 特定のスケジュールされたWindows中にバランサーを実行することを検討してください。 スケジュール ウィンドウを設定する方法については、「バランシング ウィンドウのスケジュール 」を参照してください。

シャード ゾーンを構成し、シャードの物理リソースに基づいてコレクションを配布するには、次の手順に従います。

1

各ゾーンのシャードを構成するには、 addShardToZoneコマンドを使用します。

shard0shard2HI_RAMゾーンに追加する。

sh.addShardToZone("shard0", "HI_RAM")
sh.addShardToZone("shard2", "HI_RAM")

shard1shard2FLASHゾーンに追加する。

sh.addShardToZone("shard1", "FLASH")
sh.addShardToZone("shard2", "FLASH")
2

シャードキーの範囲をゾーンに関連付けるには、 sh.updateZoneKeyRange()を使用します。

このシナリオでは、コレクション内のすべてのドキュメントを適切なゾーンに関連付けます。 すべてのコレクション ドキュメントをゾーンに関連付けるには、次のゾーン範囲を指定します。

  • 下限 { "_id" : MinKey }

  • の上限 { "_id" : MaxKey }

bigDataコレクションに、以下を設定します。

  • 名前空間をshardDistributionDB.bigDataに、

  • MinKeyの下限値(

  • 上限はMaxKeyで、

  • ゾーンを へ FLASH

sh.updateZoneKeyRange(
"shardDistributionDB.bigData",
{ "_id" : MinKey },
{ "_id" : MaxKey },
"FLASH"
)

manyIndexesコレクションに、以下を設定します。

  • 名前空間をshardDistributionDB.manyIndexesに、

  • MinKeyの下限値(

  • 上限はMaxKeyで、

  • ゾーンを へ HI_RAM

sh.updateZoneKeyRange(
"shardDistributionDB.manyIndexes",
{ "_id" : MinKey },
{ "_id" : MaxKey },
"HI_RAM"
)
3

両方のコレクション( bigDatamanyIndexes )をシャードするには、 { _id: "hashed" }シャードキーを指定します。

次のコマンドを実行します。

sh.shardCollection(
"shardDistributionDB.bigData", { _id: "hashed" }
)
sh.shardCollection(
"shardDistributionDB.manyIndexes", { _id: "hashed" }
)
4

チャンク分散とシャード ゾーンを表示するには、 sh.status()メソッドを使用します。

sh.status()

次回バランサーが実行されると、必要に応じて チャンク が分割され、構成された ゾーン に従って、チャンクがシャード全体に移行されます。 バランサーが完了するまでの時間は、シャードの数、使用可能なメモリ、 IOPSなどのいくつかの要因によって異なります。

バランシングが完了すると、次のことを行います。

  • manyIndexesコレクション内のドキュメントのチャンクはshard0shard2に存在

  • bigDataコレクション内のドキュメントのチャンクはshard1shard2に存在します。

シャーディングとバランシングの詳細については、次のページを参照してください。

戻る

挿入専用ワークロードの分散ローカル書込み