0

私は IT の学生で、大学では RDBMS のみを学んでいます。MongoDB と連絡を取り、教育目的のみの小さなビデオ ゲーム コレクション マネージャーを開発したいと考えています。

保存されている利用可能なプラットフォームの概要を知りたいです。例えば

  • パソコン
  • Xbox
  • Xbox360
  • プレイステーション

等々

プラットフォームのいずれかが選択されている場合、選択したプラットフォームに一致するすべてのエントリを照会します。

だから私の最初のアイデアは、プラットフォームとゲームのコレクションにすることです

プラットホーム:

_id : "PLATFORMID"
name : platform_one

ゲーム:

_id : "SOMEID"
name : game_One
publisher : somePublisher
platform : PLATFORMID

ドキュメントにできるだけ多くのことを書くことがベスト プラクティスであることはわかっていますが、この場合は理想的ではないと思います。利用可能なすべてのプラットフォームを取得するには、すべてのゲームをクエリし、コレクション全体を反復処理して選択する必要があるためです。プラットフォームから。

私のアプローチでは、起動時にプラットフォームのみをロードしてから、すべてのゲームを照会することができます。

私は正しいですか、それともMongoDBでもっと良い解決策がありますか?

これは NoSql DB を使用した最初のプロジェクトであるため、ヘルプやヒントをいただければ幸いです。

4

1 に答える 1

0

スキーマを設計する前に、これを読むことをお勧めします: http://docs.mongodb.org/manual/core/data-modeling/ mongo のさまざまなデータ モデルが何であるかについての良いアイデアが得られるからです。これにより、Mongo で物事を行う方法の確固たる基盤が作成されます (従来の RDB とは大きく異なります)。

Mongo スキーマはユースケースに大きく依存しているため、データ構造はプログラムと緊密に統合されています。データを完全に正規化する必要があるとは思わないでください。これは通常、mongo を使用する場合の正しいアプローチではありません。また、それが真実である場合、選択できるスキーマ構造はさまざまであり、多くの場合、必要なパフォーマンスはその選択がどのように行われるかであることに注意してください。したがって、まったく同じデータを持つ 2 つのアプリケーションは、まったく異なるデータ構造を持つ可能性があり、どちらもユース ケースに適していますが、他のアプリケーションを使用するのは正しくありません (とにかくパフォーマンスが好きな場合)。特定のケースでは、プラットフォーム フィールドをゲーム ドキュメントに入れることをお勧めします。すべてのプラットフォームを取得するには、いくつかの方法があります。最初のオプション: すべてのプラットフォームを含むコレクションを作成します。これらは _id フィールドに格納され、それが唯一のコンテンツであるか、そのプラットフォームに関する追加のフィールドを持つことができます。これらのプラットフォームは固有のものであり、プログラム ロジックは最新の状態に保つ必要があります。おそらく、アプリケーションは、ゲーム コレクションのドキュメントを作成するときに、このコレクションからの選択リストとしてプラットフォームのみを提供します。これにより、多くのクライアントが安価に提供されるプラットフォームで同期を保つことができます。外部キーがないことに注意してください。そのため、プログラム自体がこれらのコレクションを同期させておく必要があります。2 番目のオプション: 個別の使用: おそらく、アプリケーションは、ゲーム コレクションのドキュメントを作成するときに、このコレクションからの選択リストとしてプラットフォームのみを提供します。これにより、多くのクライアントが安価に提供されるプラットフォームで同期を保つことができます。外部キーがないことに注意してください。そのため、プログラム自体がこれらのコレクションを同期させておく必要があります。2 番目のオプション: 個別の使用: おそらく、アプリケーションは、ゲーム コレクションのドキュメントを作成するときに、このコレクションからの選択リストとしてプラットフォームのみを提供します。これにより、多くのクライアントが安価に提供されるプラットフォームで同期を保つことができます。外部キーがないことに注意してください。そのため、プログラム自体がこれらのコレクションを同期させておく必要があります。2 番目のオプション: 個別の使用:http://docs.mongodb.org/manual/reference/command/distinct/ . これにより、クエリの個別の値が返されます。この特定のケースでは:

db.runCommand({distinct: "game", key: "platform", query: {} })

ただし、大規模なコレクションで静的なデータ セットを取得する場合、これは非常にコストがかかる可能性があります。したがって、キーが比較的固定されている場合は、最初のオプションを使用することをお勧めします。キーがクエリ間で変化する可能性がある場合は、このオプションが最適です。

ベスト、チャーリー

于 2013-09-23T20:21:25.587 に答える