0

我是 NoSQL/MongoDB 世界的新手,所以我正在尝试几件事。

假设我想使用 MongoDB 创建一个博客。

我可以创建这样的博客文章:

{
    Title: "My First Post",
    Body: "Bla de bla de bla bli bla de bah"
    Date: "07/07/2013" // or 06/07/2013 when using javascript date notation
}

然后我希望我的读者发表评论。我知道我的读者的一件事是他们非常投入。他们在我的博客文章中写了数千条评论。

第一个问题:嵌入评论 是个好主意吗?或者将它们存储在他们自己的集合中并参考博客帖子 ID 是否更好?

这是另一个例子。假设我想创建一个像网站这样的社交媒体,它有几种不同类型的对象(即:博客文章、视频、联系人),人们可以订阅这些对象,以便他们可以评论和阅读其他人的评论。

评论提要如下所示:

{
    Type:[either blog post,video or contact]
    Name:"Comments on this crazy video"
    SubscribedUsers:[userid1,userid2,userid3...userid999]
    Comments: {
        {
            Name:"Purple Dog",
            Date: "07/07/2013 09:12:23",
            Text: "Bla bla bla"
        },
        {
            Name:"Shizzly Feather",
            Date: "07/07/2013 09:23:08",
            Text: "I agree with Purple Dog."
        }
    }
}

(也许符号有点不对,但我希望你明白我的意思)

问题二: 上面的例子对于这样的网站来说是个好主意吗?MongoDB 是一个很好的选择,还是我不应该将它用于这样的事情?(那我应该使用什么?)或者是否有另一种方法来实现相同的结果(最后,我想向用户显示一个聚合的提要,其中所有评论按日期 DESC 排序,用于他们订阅的提要)

我想要学习的(希望对其他人有用的)是何时选择 MongoDB/NoSQL 以及何时坚持使用 RDBMS。

4

2 回答 2

0

这是另一种称为分桶策略的混合方法

http://www.slideshare.net/jrosoff/mongodb-advanced-schema-design-inboxes

于 2013-08-13T13:03:51.710 回答
0

如果您使用的是 MongodB,最好嵌入评论,因为评论与每个帖子有着千丝万缕的联系——事实上,与帖子无关/无关的评论可能被视为垃圾邮件。当您要求说与帖子相关的每条评论时,嵌入就会发光。当您要求说,过去 6 小时内任何人发表的每条评论时,嵌入很糟糕,但我想不出您可能想要要求这样的事情的原因 :)

如果您将评论放在他们自己的表格中,并且您确实提出诸如“给我过去六个小时内所有人发表的所有评论”之类的问题,您会喜欢 RDBMS。另一方面,当 Julie C.(理所当然地)希望看到与她的帖子相关的所有评论并且您必须在“海报”表、“帖子”表和“评论”之间运行“连接”操作时,RDBMS 很糟糕表给她她所期望的。

所以,选择你的毒药:)

于 2013-07-07T20:24:28.647 回答