21

私はmongodbが初めてで、DBスキーマの設計に関するジレンマに直面しています:

1 つのコレクションを作成するか、データを複数のコレクションに入れる必要があります (これらをカテゴリと呼ぶことができると思います)。

このような質問が数多く寄せられていることはわかっていますが、私の場合は次の 2 つの理由で異なると思います。

  • 多くのコレクションを作成する場合、約 120 のコレクションを作成する必要があり、それで終わりです。これでは今後伸びません。
  • 複数のコレクションにクエリを実行したり、挿入したりする必要がないことはわかっています。コレクション X 内のドキュメントは、他のコレクションに保存されているドキュメントとは関係がないため、常に 1 つだけを照会する必要があります。ただし、ドキュメントは DB の他の部分 (userId など) への参照を保持する場合があります。

私の質問は、120 個のコレクションによってクエリのパフォーマンスが向上する可能性があるかどうかです。これは私の場合に役立つ最適化ですか?

それとも、単一のコレクション + シャーディングを使用する必要がありますか?

各コレクションには、数百万のドキュメントが含まれていると予想されます。1 つだけ使用すると、数十億のドキュメントが保存されます。

前もって感謝します!

- - - - 編集:

素晴らしい答えをありがとう。

実際、120 個のコレクションは自作の制限にすぎず、実際には最適ではありません。

コレクション内のデータは Web パブリッシャーに関連しています。何百万ものこれらが存在する可能性があります (任意の Web サイトが参加できます)。

理想的な状況は、パブリッシャーごとにコレクションを作成できる場合だと思います (データのみを保持するため)。しかし明らかに、これは mongo の制限により不可能です。

そこで、少なくとも何らかの方法でデータを配布するために、固定数のコレクションのアイデアを思いつきました。例: コレクション "A_XX" は、名前が "A" で始まるパブリッシャーの XX プラットフォーム関連データを保持します..など. これらのプラットフォームのいくつかしかサポートしないため、120 個のコレクションで十分です。

別の Web サイトで、多くのコレクションの代わりに多くのデータベースを使用することを誰かが提案しました。しかし、これはオーバーヘッドを意味し、多くの異なる接続を使用/管理する必要があります。

これについてあなたはどう思いますか?より良い解決策はありますか?

元の質問で十分に具体的でなくて申し訳ありません。

前もって感謝します

4

2 に答える 2

2

ここでの主な問題は、コレクションを同じデータベースに分離すると、現在の MongoDB バージョンではパフォーマンスがほとんど得られないことです。単一のコレクションのセットアップで何らかの追加のパフォーマンスを得るには、コレクションを別のデータベースに移動する必要があります。その後、どのデータベースにクエリを実行するかを判断するための運用上のオーバーヘッドが発生します。

はい、簡単に 120 個のコレクションを取得できますが、現在のところ、https ://jira.mongodb.org/browse/SERVER-1240が実装されていないため、実際には何も得られません (いつでも)。

1 つのコレクションに何十億ものドキュメントを格納することは、それほど悪いことではありません。これを個別のコレクションに格納したとしても、単一のコレクションをシャーディングするのと同じように、おそらく単一のサーバー上には存在しないと思われるため、この場合、マルチサーバーのセットアップによる速度の低下も問題になりません.

私の個人的な意見では、単一のコレクションを使用する方がすべてにおいて簡単です。

于 2013-04-19T07:52:43.843 に答える