【问题标题】:Spring, mongodb data model advicesSpring, mongodb 数据模型建议
【发布时间】:2013-10-17 19:29:10
【问题描述】:

我来这里是为了获得一些关于在我的应用程序中构建数据模型 (mongodb) 的最佳方式的建议。

假设我将拥有这些实体:

用户: 具有所有常用属性的用户,我需要每个用户都有一个关注者和关注者列表。 每个用户还会有一个他觉得有趣的“帖子”列表。

帖子: 帖子将包含内容、创建日期、作者(用户)、喜欢帖子的用户列表(我希望能够从帖子中检索用户信息)、cmets 列表(评论)

评论: 评论将有作者(用户)、内容,并且必须链接到帖子。

我认为这个应用程序可以处理大量内容和用户,这就是我真正关心这个数据模型的原因,并且我希望能够在可维护性和性能方面以最佳方式构建它。

我真的无法自行决定在哪种情况下我需要使用嵌入文档功能或重现类似关系的数据模型。

您将如何构建此数据模型?

【问题讨论】:

    标签: spring performance mongodb datamodel


    【解决方案1】:

    我们正在将我们的帖子从 MySQL 迁移到 MongoDB,所以我也考虑过这些相同的事情。

    我们决定将用户和帖子保存在单独的集合中,并仅嵌入我们对每种方式感兴趣的属性。例如,在一篇文章中,我们有一个喜欢该文章的用户数组,但数组中的每个元素只有用户的姓名和用户名。在显示帖子时,我们可以显示喜欢该帖子的用户的名称列表,并使用用户名生成指向每个用户的链接。

    需要考虑的是,如果用户更改了他们的姓名或用户名,那么您需要更新他们创建或喜欢的每个帖子。我们不允许更改用户名,并决定在我们的案例中无需更新名称。

    这种方法在性能方面的问题是 MongoDB 自动添加到文档以允许它们增长的填充,以及如果文档增长超过分配给它的这个空间,则移动文档的开销。我们的系统对提要帖子的读取比写入要重得多,因此我们很乐意处理这些事情。

    在 MongoDB 中设计架构的正确方法最终取决于您访问数据的方式以及您的特定用例。我们也才刚刚开始,但这种方法对我们来说是有意义的。

    【讨论】:

    • 您是如何将数组的内容限制为仅用户名和用户名的?
    • 当用户点赞帖子时,我们手动将仅包含名称和用户名的对象推送到数组中。
    • 好的。我问这个是因为我相信我已经看到了一种使用 mongo 自动执行此操作的方法。但我再也找不到了。
    猜你喜欢
    • 2015-01-09
    • 2010-12-21
    • 1970-01-01
    • 2017-10-06
    • 2011-01-29
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多