基于用户的网站,数据库设计,MongoDB + NODE

时间:2015-06-02 04:51:37

标签: node.js mongodb database-design

我想用MongoDB和NODE设计一个应用程序。 开始之前我想询问您对数据库设计的看法。

要拥有一个熟悉的示例,让我们说这个应用程序就像Instagram一样,数据被分类为特殊的新闻组,如体育艺术商业和政治。

在这个应用程序中,用户可以上传有评论的图片,每张图片应该在我之前提到的特殊新闻组中。

我想按如下方式设计我的数据库。请告诉我你的想法和建议。

User: [ Username,  Email,  Password ]
// Schema for SignUp //

UserData: [ Username, NewsGroup:[ Sport, Politics ], NewsReputation ]  
// Schema for Username Home Page which shows each NewsGroup of user in a tab //

News: [ Username, NewsGroupID, Picture:[ Up to 5 ], Description, Video:[Only 1] ]

Comment: [ Username, NewsGroupID, NewsID, Comment: [1 for Each array], Commentor-Username]

Following: [ Username, Following-Username ]
Follower: [ Username, Follower-Username ]

或者我可以将每个新闻数组作为子文档嵌套在UserData Schema中的NewsGroup

并在新闻模式中嵌套评论模式。

  1. 哪种方法更好?
  2. 使用MongoDB是否更好,或者我应该使用SQL数据库?
  3. 如果我想拥有搜索页面,您对此有何建议?
  4. 我是基于用户的网站的新手,所以我将不胜感激任何想法和建议。

    谢谢!

1 个答案:

答案 0 :(得分:1)

Q1 :没有最好的'图案。哪种模式更好取决于您将如何使用它。对于一般的想法,您可以参考有关data model design的官方文档。但它从未如此简单。

在您的示例中,您存储数据的方式还可以,但有一些限制。例如,大多数情况下,您显示带有评论的新闻。然后,如果您将注释存储在新闻文档中,则可以在一个查询中获取它们,否则您必须在另一个查询中执行此操作。

新闻组也会发生同样的事情,但你可能不会将它们存储在新闻中。因为它的变数。当它发生变化时,你可能不得不改变所有新闻中的所有组名,这将是痛苦的。

我只是说,模式为您的业务服务。为您的企业选择最便捷的模式。

Q2 :我想说SQL可以在这里工作,但这也是使用MongoDB实现高性能和高可用性的典型场景。您可能希望了解有关replication及其自动故障转移功能的更多信息。

Q3 :MongoDB在2.6(包含)之后附带full text index功能。并非所有语言都受支持,您可能需要先检查文档。我建议您可以在业务发展到足够大之前使用此功能。那么你可以考虑弹性搜索,lucece或其他解决方案。