用于线程消息的MongoDB / Mongoose模式(有效)

时间:2014-07-23 06:49:06

标签: performance mongodb mongoose schema inbox

我对noSQL数据库有些新意见(虽然我对关系数据库相当不错),但我想知道处理带有线程消息的收件箱系统的最有效方法是什么。

每条消息'将有一个发件人和收件人。用户之间接收/发送的消息数量差别很大。该系统应该可以很好地扩展到超过1k +用户。

我已经阅读了关于写/读的扇出,但我不确定这对于线程消息有多好用。

由于我一般都是MongoDB / NoSQL的新手,因此我并不是真的习惯于以这种方式高效地构建数据。

我猜测它将以任何有效的方式处理嵌套对象...但我不能解决一个看起来既有效又方便线程的设计2个用户之间的对话。

我想过用两个用户的数组存储数据,并结合一系列消息'对象。但那就是2个用户的用户名的顺序问题。 (例如[UserA,UserB]和[UserB,UserA]都是可能的,并且会有问题,因此这似乎是一个坏主意)。

我想把整个扇子放在读/写的东西上,但这对于线程化的消息来说似乎并不高效(因为如果收件人抓取邮件很方便,发送者抓取邮件就不会和反之亦然)。

我倾向于倾向于收件人抓取邮件(因为收件箱加载了多条邮件,而发送只涉及一条[虽然查询时间较长])。但我真的很想一次性获取线程会话,以及用户与线程对话进行线程交换的用户列表(对于线程列表)。

如果有人可以为线程对话提供有效的架构,我将非常感激。我一直在研究这个并试图在几个小时内完成设计,我已经筋疲力尽了。我一直在寻找设计中的缺陷并废弃它们,我真的只是喜欢NoSQL数据库/ MongoDB更有经验的人的一些意见,所以我可以避免制造一个巨大的设计缺陷和/或编写可能的设计缺陷已经使用更好的数据库设计进行处理。

提前感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:9)

关于这个特定主题,你很幸运,有一篇很棒的帖子讨论了这里的各种方法(这与你所看到的有些不同,但并没有太大区别):

http://blog.mongodb.org/post/65612078649/schema-design-for-social-inboxes-in-mongodb

然后,Darren Wood和Asya Kamsky分三部分详细介绍了MongoDB World 2014的主题:

Part 1 OutlineVideo

Part 2 OutlineVideo

Part 3 OutlineVideo

同样在MongoDB World,Dropbox的人们谈到了他们在构建邮箱时所学到的经验教训:

http://www.mongodb.com/presentations/mongodb-mailbox

然后,为了完善它,有一个完整的参考架构,其代码名为Socialite on Github,由前面提到的Darren Wood编写:

https://github.com/10gen-labs/socialite