【问题标题】: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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-04
        • 2019-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多