0

バックエンドとしてmongodbを使用しています。映画、音楽、本などのデータを 1 つのコレクションに保存しています。すべての bson エントリの必須フィールドは、「_id」、「name」、「category」です。残りのフィールドは、エントリが属するカテゴリによって異なります。たとえば、映画の記録が次のように保存されています。

{
  "_id": <some_id>,
  "name": <movie_name>,
  "category": "movie",
  "director": <director_name>,
  "actors": <list_of_actors>,
  "genre": <list_of_genre>
}

音楽については、

{
  "_id": <some_id>,
  "name": <movie_name>,
  "category": "music"
  "record_label": <label_name>
  "length": <length>
  "lyrics": <lyrics>
}

現在、_id、名前、およびカテゴリのみが共通フィールドである 12 の異なるカテゴリがあります。その他のフィールドは、カテゴリごとにすべて異なります。すべてのデータを 1 つのコレクションに保存するという私の決定は適切ですか、それともカテゴリごとに異なるコレクションを作成する必要がありますか。

4

2 に答える 2

1

複数のカテゴリを検索する場合は、1 つのコレクションが最適です。単一のコレクションを使用すると、挿入時のパフォーマンスが低下する可能性がありますが、書き込みの必要性が高くない場合は問題になりません。

于 2012-08-30T15:05:00.740 に答える
1

MongoDB では、すべてのドキュメントが異なっていても、ドキュメントに任意のフィールド構造を格納できるため、問題はありません。これら 3 つの一貫したフィールドを持つことで、それらをインデックスの一部として使用し、クエリを処理することができます。これは、単一のコレクションにすべてを格納できるため、スキーマレス データベースが役立つ良い例です。

このように単一のコレクションを使用しても、パフォーマンスに影響はありません。実際、後でスケーリング戦略としてコレクションを分割できるため、実際には利点があります。シャーディングはコレクション レベルで行われるため、_id フィールドに基づいてシャーディングしてそれらを均等に分散させたり、カテゴリ フィールドを使用してシャードごとに特定のカテゴリを作成したり、組み合わせたりすることができます。

注意すべきことの 1 つは、将来のクエリ要件です。他のフィールドにインデックスを付ける必要がある場合は、疎インデックスを使用できます。つまり、インデックス付きフィールドのないドキュメントはインデックスに含まれないため、インデックスにスペースを取りません。便利な最適化。

また、更新を行った場合は、ドキュメントが大きくなることに注意する必要があります。これは、パフォーマンスに大きな影響を与えます。

于 2013-02-23T13:55:32.177 に答える