我想用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
中并在新闻模式中嵌套评论模式。
我是基于用户的网站的新手,所以我将不胜感激任何想法和建议。
谢谢!
答案 0 :(得分:1)
Q1 :没有最好的'图案。哪种模式更好取决于您将如何使用它。对于一般的想法,您可以参考有关data model design的官方文档。但它从未如此简单。
在您的示例中,您存储数据的方式还可以,但有一些限制。例如,大多数情况下,您显示带有评论的新闻。然后,如果您将注释存储在新闻文档中,则可以在一个查询中获取它们,否则您必须在另一个查询中执行此操作。
新闻组也会发生同样的事情,但你可能不会将它们存储在新闻中。因为它的变数。当它发生变化时,你可能不得不改变所有新闻中的所有组名,这将是痛苦的。
我只是说,模式为您的业务服务。为您的企业选择最便捷的模式。
Q2 :我想说SQL可以在这里工作,但这也是使用MongoDB实现高性能和高可用性的典型场景。您可能希望了解有关replication及其自动故障转移功能的更多信息。
Q3 :MongoDB在2.6(包含)之后附带full text index功能。并非所有语言都受支持,您可能需要先检查文档。我建议您可以在业务发展到足够大之前使用此功能。那么你可以考虑弹性搜索,lucece或其他解决方案。