8

私はデータベースストレージとしてmongodbを使用しています。

私のWebアプリはユーザーの応答を収集する必要があります。

ユーザーの応答は、mongodbのドキュメント(またはSQLの行)です。文書の長さは約10〜200です。

ユーザーの応答は分類されます(1つのカテゴリのみに)。カテゴリごとに、ユーザーの応答数は100〜5000です。2つのドキュメントが同じカテゴリにある場合、その長さは同じです。(またはSQLに同じ列があります)

カテゴリは、管理者の要求により動的に作成/削除できます。

現在、私のデータ構造は

category collection
{_id, 'name' : 'c1', 'somevalue' : '123'}
{_id, 'name' : 'c2', 'somevalue' : '23'}
{_id, 'name' : 'c3', 'somevalue' : '143'}
{_id, 'name' : 'c4', 'somevalue' : '153'}
...

'c1' collection
{ userresponse1 }
{ userresponse2 }
{ userresponse3 }
...

'c2' collection
{ userresponse1 }
{ userresponse2 }
{ userresponse3 }
...

'c3' collection
{ userresponse1 }
{ userresponse2 }
{ userresponse3 }
...

'cN' collection
{ userresponse1 }
{ userresponse2 }
{ userresponse3 }
..

これは賢明な決断ですか?カテゴリごとにコレクションを割り当てることで、何かが悪くなる可能性が心配です。コレクションが多い場合、パフォーマンスの問題は発生しますか?コレクションをマージして、代わりにuserresponsesにいくつかの識別子を与える必要がありますか?

4

1 に答える 1

1

もちろん、答えはクエリパターンと、見ているコレクションの数によって異なります。詳細を知らなくても、多くの応答コレクションにまたがるクエリを作成する必要があるのではないかと思います。

たとえば、それぞれuserresponseuserIdフィールドがあり、特定のユーザーのすべての応答の日付でソートされたリストを取得したいとします。すべてのコレクションをループし、それぞれをクエリして、クライアント コードで結果を結合する必要があります。明らかに、これは、インデックス付きUserResponseコレクション内の単一の単純なクエリ/並べ替えと比較して、非常に非効率的です。

于 2013-01-30T15:48:27.067 に答える