2

多くのメッセージを含むアプリケーションがあります。すべてのユーザーは、このメッセージを他のユーザーに送信するために 1 つのメッセージを選択できます。最後に、このメッセージはフラグを取得します ('メッセージの送信先: user1、user2、...)。これらの送信情報は mongoDB に保存する必要があります。今、私は2つの異なる方法について考えています:

1.) 1 つのコレクション内の多数の小さなドキュメント

すべてのドキュメントには、次のように、メッセージ ID、このメッセージを送信したユーザー名、および受信者の配列が含まれています。

{
_id:'3DA5FC203,
sender:'username1',
recipient:['user1','user2','user3']
},
{
_id:'4AD290FC,
sender:'username1',
recipient:['user1','user2','user3']
},
{
_id:'4AD290FC,
sender:'usernameX',
recipient:['user2']
}

1000 人のユーザーが 1 日に 10 件のメッセージを 1 人以上の受信者に送信すると、年間 360 万のドキュメントがあるとします。

2.) 1 つのコレクション内のドキュメントのサイズを小さくする

もう 1 つの方法では、ドキュメントは少なくなりますが、ドキュメントは大きくなります。たとえば、このメッセージのすべての送信者と受信者に関する情報を含む、メッセージごとに 1 つのドキュメント。mongoDB エントリは次のようになります。

{
_id:'3DA5FC203,
'username1':['user1','user2','user3'],
},
{
_id:'4AD290FC,
'username1':['user1','user2','user3'],
'usernameX'['user2']
},

この場合: 3 つではなく 2 つのドキュメント (上記の例) ですが、1 つのドキュメントに 100 以上の送信者を含めることができます。

私の質問: mongoDB はどのケースをより適切に処理しますか? 多くの小さなドキュメントまたはそれほど大きくないドキュメント? また、次のような分析を実行するのに適したシナリオはどれですか。1 人の送信者 (username1) からのすべてのメッセージと受信者を表示しますか?

4

1 に答える 1