我对noSQL数据库有些新意见(虽然我对关系数据库相当不错),但我想知道处理带有线程消息的收件箱系统的最有效方法是什么。
每条消息'将有一个发件人和收件人。用户之间接收/发送的消息数量差别很大。该系统应该可以很好地扩展到超过1k +用户。
我已经阅读了关于写/读的扇出,但我不确定这对于线程消息有多好用。
由于我一般都是MongoDB / NoSQL的新手,因此我并不是真的习惯于以这种方式高效地构建数据。
我猜测它将以任何有效的方式处理嵌套对象...但我不能解决一个看起来既有效又方便线程的设计2个用户之间的对话。
我想过用两个用户的数组存储数据,并结合一系列消息'对象。但那就是2个用户的用户名的顺序问题。 (例如[UserA,UserB]和[UserB,UserA]都是可能的,并且会有问题,因此这似乎是一个坏主意)。
我想把整个扇子放在读/写的东西上,但这对于线程化的消息来说似乎并不高效(因为如果收件人抓取邮件很方便,发送者抓取邮件就不会和反之亦然)。我倾向于倾向于收件人抓取邮件(因为收件箱加载了多条邮件,而发送只涉及一条[虽然查询时间较长])。但我真的很想一次性获取线程会话,以及用户与线程对话进行线程交换的用户列表(对于线程列表)。
如果有人可以为线程对话提供有效的架构,我将非常感激。我一直在研究这个并试图在几个小时内完成设计,我已经筋疲力尽了。我一直在寻找设计中的缺陷并废弃它们,我真的只是喜欢NoSQL数据库/ MongoDB更有经验的人的一些意见,所以我可以避免制造一个巨大的设计缺陷和/或编写可能的设计缺陷已经使用更好的数据库设计进行处理。
提前感谢您提供任何帮助。
答案 0 :(得分:9)
关于这个特定主题,你很幸运,有一篇很棒的帖子讨论了这里的各种方法(这与你所看到的有些不同,但并没有太大区别):
http://blog.mongodb.org/post/65612078649/schema-design-for-social-inboxes-in-mongodb
然后,Darren Wood和Asya Kamsky分三部分详细介绍了MongoDB World 2014的主题:
同样在MongoDB World,Dropbox的人们谈到了他们在构建邮箱时所学到的经验教训:
http://www.mongodb.com/presentations/mongodb-mailbox
然后,为了完善它,有一个完整的参考架构,其代码名为Socialite on Github,由前面提到的Darren Wood编写: