在mongodb中构造多个数据的有效方法是什么

在mongodb中构造多个数据的有效方法是什么,mongodb,mongodb-php,Mongodb,Mongodb Php,我正在使用mongodb编写一个应用程序,在这个应用程序中,用户可以互相发送消息。这里是我要存储的字段 user_to user_from message sent ip unread 我想问的是,如果用户A向用户B发送消息,例如: user_to : B, user_from : A, message :hello world, sent:1334901545, ip : XX.XX.XX.X, unred : true 这是第一次存储数据的格式,但当用户A再次向用户B发送消息时,我应该如

我正在使用mongodb编写一个应用程序,在这个应用程序中,用户可以互相发送消息。这里是我要存储的字段

user_to
user_from
message
sent
ip
unread
我想问的是,如果用户A向用户B发送消息,例如:

user_to : B,
user_from : A,
message :hello world,
sent:1334901545,
ip : XX.XX.XX.X,
unred : true
这是第一次存储数据的格式,但当用户A再次向用户B发送消息时,我应该如何存储该数据?? 我想了两种方法,请告诉我哪一种最有效

user_to : B,
user_from : A,
message :hello world again,
sent:1334901745,
ip : XX.XX.XX.X,
unred : true

第一种类型的结构非常简单,便于查询和分析,但我认为它会增加重复数据,并且随着应用程序的增长会消耗更大的磁盘空间

尽管第二种类型消除了重复记录和磁盘空间不足,但它使数据检索变得复杂,难以读取,无法有效地用于写入和许多其他复杂情况


我只是想知道,考虑到mongodb具有高度可扩展性,哪种方法才是正确的?我应该简单点,还是消除重复记录并节省磁盘空间?

单独记录会更好地提高查询速度,我会这样做。在您的示例中,也没有那么多冗余数据。如果有,你总是可以把它分为一个新的系列

user_to : B,
user_from : A,
messages : array(
array(message="hello world",sent="1334901545",ip: XXX.X.XX.XX,unread:true),
array(message="hello world again",sent="1334901745",ip:XX.XX.XX.X,unread:true )
)