MongoDB:私人消息系统......如何跟踪已发送的消息

时间:2010-06-27 04:45:58

标签: php mongodb

如果要复制twitter的DM功能,您将如何为其设计架构?我能够发送和回复邮件,但我的问题是如何跟踪发送的邮件?如果Bob向Amy发送消息,Amy将看到Bob的消息。 Bob还在他的“已发送文件夹”中提供了他的消息副本。

现在,每条消息都有一个“收件人”和“发件人”。首先想到的是,我想我就是因为我可以查询发件人是谁,从而在用户的“已发送”选项卡中显示该消息。但是,艾米可能想要删除该消息,那么呢?我不想摆脱这条消息,因为鲍勃可能因为某种原因仍然希望将它放在他发送的档案中。

我能想到的另一个选择是将消息保存两次,这是愚蠢的,可能会失控。

2 个答案:

答案 0 :(得分:0)

  

我能想到的另一个选择是将消息保存两次,这是愚蠢的,可能会失控。

事实上,这与愚蠢的相反。保存消息两次正是这里所期望的。在这些类型的非关系数据库中,预计会出现非规范化。

看看你自己的描述。

  

鲍勃还在他的“已发送文件夹”中提供了他的消息副本。

好的,所以Bob有“副本”的消息,这个“副本”在数据库中是一个不同的文件似乎很合理。

答案 1 :(得分:0)

我能想到的2个解决方案是:

  1. 保存2份邮件。这可能看起来像是浪费,但如果您需要跨多个服务器进行分片,则效果很好 - 所有用户详细信息都存储在一起。 (注意:这是电子邮件的工作方式 - 一种非常分散的模型)

  2. 如上所述,使用发件人/收件人保存一份副本,但将删除功能设为“软”删除 - 即。将邮件标记为已删除而不是实际删除它。如果您希望发送方和接收方能够彼此独立地删除消息,则可能需要2个标记。