1

自動シャーディングに関する MongoDB のドキュメントには、「シャーディングはコレクションごとに実行されます。小さなコレクションはシャーディングする必要はありません」と記載されています。

私たちのビジネスには、多くのデータベース (~100) と多くの小さなコレクション (~30) があり、それぞれのドキュメント数は 1 から 3000 です。DB システムは、1 か月あたり約 1 億ページ ビューを見ています。

そのシナリオでは、DB の使用量とサイトのトラフィックがロード バランシングを必要とするほど十分に高いにもかかわらず、コレクションが十分に大きくならないため、シャーディングがアクティブになります。ドキュメントからは、明確な答えが見つからないようです。

4

2 に答える 2

0

シャーディングすることが理にかなっているかどうかは、データベースへの書き込みまたは読み取りがほとんどであるかどうかに少し依存します。シャーディングは主に書き込みスケーリングに使用されますが、多くの書き込みを行わない場合は、読み取りに「slaveOkay」を指定したレプリカセットを使用するだけでも同様に機能する可能性があります。

あなたが提供した数字から、あなたは約900万の文書を手に入れているようですが、それらは大きな文書ですか?それらがメモリに簡単に収まる場合は、フェイルオーバー機能以外にレプリカセットは必要ない可能性があります。

于 2012-04-06T10:40:26.560 に答える
0

これはあなたのユースケースについてもっと知らずに答えるのは難しいですが、私はそれを試してみます。

シャーディングが必要なものであると確信していますか?あなたの挿入率はどのように見えますか?

静的なデータセット、または比較的静的なセットを使用する場合は、おそらくシャーディングする必要はありません。より多くのセカンダリを使用して、slaveOK読み取りを有効にすることができます。読み取りはさまざまなセカンダリに配布され、読み取り容量がスケールアップされます。

そうではなく、シャーディングする必要がある場合は、オプションがあります。ただし、最初に、自動シャーディングがどのように機能するかを簡単かつ大まかに説明します。

モンゴスプロセスは、一般的にチャンクの分割と移行を担当します。これらは、分割とバランシングの2つの別個の操作です。

  • 分割は、最大チャンクサイズの特定の部分が書き込まれたことをモンゴスが認識したときに発生します。実際にそれを保証するのに十分なデータがある場合、分割が開始されます。時間の経過とともに、十分なデータが書き込まれると、チャンクの数が増えます。
  • チャンクの不均衡がある場合にバランシングが発生します(現在、2.0では8ですが、2.2ではより動的なヒューリスティックに移行しています)。バランサーは、バランスがとれるまで、シャードの周りのチャンクを移動します。

したがって、バランサーがチャンクを適切に移動するために必要なチャンクを生成するには、最大チャンクサイズ(2.0ではデフォルトは64MB)に対して十分なデータを書き込む必要があります。それがあなたのデータで起こらないのであれば、あなたは見ることができます:

  1. チャンクサイズを小さくする(欠点もあります-http ://www.mongodb.org/display/DOCS/Sharding+Administration#ShardingAdministration-ChunkSizeConsiderations
  2. チャンクを手動で分割/移動する

手動の手順については、以下を参照してください。

http://www.mongodb.org/display/DOCS/Splitting+Shard+Chunks

http://www.mongodb.org/display/DOCS/Moving+Chunks

于 2012-04-06T10:40:43.110 に答える