我有一个包含许多消息的应用程序。每个用户都可以选择一条消息,以便将此消息发送给其他用户。最后这条消息会得到一个标志('消息被发送到:user1,user2,...)那些发送信息应该存储在 mongoDB 中。现在我正在考虑两种不同的方式:
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 条消息,那么如果每年有 360 万份文档。
2.) 一个集合中较小的文档
另一种方式是更少的文件,但更大的文件。例如,每条消息都有一个文档,其中包含有关该消息的所有发件人和收件人的信息。一个 mongoDB 条目可能如下所示:
{
_id:'3DA5FC203,
'username1':['user1','user2','user3'],
},
{
_id:'4AD290FC,
'username1':['user1','user2','user3'],
'usernameX'['user2']
},
在这种情况下:只有 2 个文档而不是 3 个(上面的示例),但一个文档可以包含 100 个或更多发件人。
所以我的问题是:mongoDB 会更好地处理哪种情况?许多小文件还是不太大?哪种情况更适合执行分析,例如:显示来自一个发件人(用户名 1)的所有消息和收件人?