【问题标题】:MongoDB / Mongoose Schema for Threaded Messages (Efficiently)用于线程消息的 MongoDB / Mongoose 模式(高效)
【发布时间】:2014-09-14 05:32:33
【问题描述】:

我对 noSQL 数据库有点陌生(不过我对关系数据库相当熟悉),我想知道处理带有线程消息的收件箱系统的最有效方法是什么。

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

我已经阅读了有关写/读时扇出的信息,但我不确定这对线程消息的效果如何。

由于我是 MongoDB / NoSQL 的新手,我不太习惯以这种方式有效地构建数据。

我猜想会有嵌套对象以任何一种有效的方式来处理这个问题……但我无法确定一个对于两个用户之间的线程对话既高效又方便的设计。

我想用一个由 2 个用户组成的数组存储数据,并结合一个“消息”对象数组。但接下来是 2 个用户的用户名的顺序问题。 (例如,[UserA, UserB] 和 [UserB, UserA] 都是可能的并且会有问题,所以这似乎是个坏主意)。

我想过在读/写事情上进行整个扇形,但这对于线程消息似乎并不有效(因为如果收件人抓取消息很方便,那么发件人抓取消息就不会了,反之亦然)。

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

如果有人能给我一个有效的线程对话模式,我将不胜感激。我一直在研究这个并试图解决几个小时的设计,我已经筋疲力尽了。我一直在我的设计中发现缺陷并废弃它们,我真的很想从对 NoSQL 数据库/MongoDB 更有经验的人那里得到一些输入,这样我就可以避免出现巨大的设计缺陷和/或编写本来可以处理的逻辑更好的数据库设计。

提前感谢所有帮助。

【问题讨论】:

    标签: performance mongodb mongoose schema inbox


    【解决方案1】:

    在这个特定的主题上你很幸运,有一篇很棒的帖子在这里讨论了架构的各种方法(这与你所看到的内容略有不同,但没有太大区别):

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

    然后,Darren Wood 和 Asya Kamsky 在 2014 年 MongoDB World 上分三个部分详细介绍了这个主题:

    Part 1 OutlineVideo

    Part 2 OutlineVideo

    Part 3 OutlineVideo

    在 MongoDB World 上,Dropbox 的人也谈到了他们在构建邮箱时学到的经验:

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

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

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

    【讨论】:

    • 感谢所有有用的链接。我在研究期间遇到了第一个和最后一个。我想我真正的问题是,为了提高效率,我应该在哪里拆分数据库模式和它的逻辑。我应该以一种允许我从已经以线程对话方式排序的数据库中获取它的方式存储它......还是应该只拥有一个消息模式并使用服务器端逻辑对其进行排序?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 2014-08-18
    • 2015-06-27
    • 2016-02-15
    • 1970-01-01
    • 2011-11-25
    • 2015-01-31
    相关资源
    最近更新 更多