【问题标题】:MongoDB relations vs SQL [duplicate]MongoDB关系与SQL [重复]
【发布时间】:2017-08-09 06:00:27
【问题描述】:
我对 Mongo 很陌生,我正在尝试了解我必须如何在不同的表/集合之间建立关系。
例如 USER 和他的 POST(S) 之间的关系。在 SQL 中,我会创建两个表,并为每个帖子提供 USER 的 USERID。
我将如何在 Mongo 中执行此操作?我是否制作2 个单独的集合,一个用于用户,一个用于帖子。还是我将帖子嵌入到用户集合中,例如this
谢谢!
【问题讨论】:
标签:
mongodb
relational-database
【解决方案1】:
这完全取决于您的具体场景,最重要的是您的使用模式(最终是您的查询)。
如果您通常在应用程序的一个区域处理用户并在另一个区域发帖,那么将它们分成两个集合当然是(唯一)正确的方法。
如果您总是需要“从用户的上下文”查看帖子,那么将帖子合并到用户文档中是一种有效的方法。不过请注意 16MB 的文档限制。因此,如果某个用户的帖子价值超过 16MB,您就会遇到需要您进行大量更改的问题。
如果您的应用程序通常侧重于帖子但也需要显示,例如特定帖子的用户名,那么您也可以将用户数据与帖子分开,但将用户名存储在用户所做的每个帖子中。在这种情况下,如果用户更改其名称,您将需要在第二个集合中的主用户记录之上更新该用户的所有帖子。请注意,一旦完全采用 MongoDB 风格,数据复制通常是必不可少的。
...就潜在设置而言,还有其他各种灰色阴影。没有对错,也没有大错。只是更适合您的情况更糟。 ;) 就像我最初写的那样,这是在写入性能、读取性能、对数据进行分析的难易程度等方面进行权衡,我将使用术语使用或数据访问模式来总结这些方面......
【解决方案2】:
MongoDB 的方式是将帖子嵌入到 USERS 集合中。
如果您想以关系方式执行此操作,您可以在 POSTS 集合中放置一个 OBJECTID 键,然后在 USERS 集合中的 ARRAY 键中引用该 OBJECTID。
但是,我会警告您,如果您预见到在数据集中使用大量关系操作,MongoDB 可能不是您想要处理的方式。我建议使用 Postgresql。