我在这里就我的应用程序中构建数据模型(mongodb)的最佳方法提出一些建议。
假设我将拥有这些实体:
用户: 具有所有常用属性的用户,我需要每个用户都有一个关注者列表和关注者。 每个用户还会有一个他感兴趣的“帖子”列表。
发表: 帖子将包含内容,创建日期,作者(用户),喜欢帖子的用户列表(我希望能够从帖子中检索用户信息),评论列表(评论)< / p>
注释: 评论将包含作者(用户),内容,并且必须链接到帖子。
我认为这个应用程序可以处理大量内容和用户,这就是我真正关心这个数据模型的原因,并且我希望能够在可维护性和性能方面构建它是最好的方法。
我真的不能自己决定在哪种情况下我需要使用嵌入式文档功能或重现类似数据模型的关系。
您将如何构建此数据模型?
答案 0 :(得分:1)
我们正在将我们的帖子从MySQL迁移到MongoDB,所以我考虑了同样的事情。
我们决定将用户和帖子保留在单独的集合中,并仅嵌入我们感兴趣的属性。因此,例如在帖子上我们有一组喜欢该帖子的用户,但数组中的每个元素只有用户的名称和用户名。在显示帖子时,我们可以显示喜欢帖子的用户名称列表,并使用用户名生成每个帖子的链接。
需要考虑的是,如果用户更改其名称或用户名,则需要更新他们创建或喜欢的每个帖子。我们不允许更改用户名,并且已决定在我们的案例中不必更新名称。
这种方法在性能方面的问题是MongoDB自动添加到文档中以允许它们增长的填充,以及如果文档增长超过分配给它的空间,则移动文档的开销。我们的系统读取比饲料帖子更重,所以这些是我们乐于处理的事情。
在MongoDB中设计架构的正确方法最终取决于您访问数据的方式以及特定用例。我们刚刚开始,但这种方法对我们来说是有意义的。