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