我希望为聊天服务器设计架构。架构需要支持消息的传递和读取。每条消息都需要选择成为私人或群组消息。
我试图考虑有关读取和发送的数据的发送位置。
在关系数据库中,可以在另一个表中设置。在MongoDB中,我可以在用户或实际的消息json文档中设置它。
如果消息不是针对特定用户而是广播消息,那么我认为最好存储将其视为消息的json文档的一部分的用户的ID。
有没有人知道一些可用的好示例模式。我不完全理解攻击这个问题的最佳方法。
答案 0 :(得分:2)
(评论太长了。它有点回答了问题)
是的,这是一项具有挑战性的设计。这也是我们无法为你做的事情,我很害怕,因为我们不了解你的所有要求,你做到了。无论你设计它,你都应该遵守通常的mongodb指南。不幸的是,他们互相冲突:
不要在一个文档中放入太多东西。
在经典的博客模式练习中,可能会想要将评论嵌入到帖子文档中,每个评论也嵌入其用户。这可能轻松导致mongodb的最大文档大小溢出。它也会导致写入争用。对MMAPv1引擎来说并不重要,但对于WiredTiger引擎(具有文档级锁定)很重要。
不要构建过度规范化的模式。
关系数据库鼓励规范化模式。在mongodb他们没用(因为没有连接)。您需要做的是仔细复制一些数据。例如,在博客/评论示例中,可以在评论中嵌入作者的ID /电子邮件,但不包括作者的其他数据(注册日期,成员资格状态等)
当我决定数据的位置或形状时,我通常会问自己这两个问题: