2013-10-10 32 views
0

我在这里获得关于在我的应用程序中构建我的数据模型(mongodb)的最佳方法的建议。Spring,mongodb数据模型建议

比方说,我将这些实体:

用户: 与所有常见的属性一个用户,我需要每个用户有追随者和下面的列表。 每个用户也将有一个他感兴趣的“发布”列表。

发表: 一篇文章将有一个内容,一个创建日期,一个作者(用户),一个喜欢该帖子的用户列表(我希望能够从帖子中检索用户信息),一个评论列表(评论)

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

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

我真的不能自己决定在哪种情况下,我需要使用嵌入式文档功能或者重现像关系数据模型。

你将如何构建这个数据模型?

回答

1

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

我们决定将用户和帖子保留在不同的集合中,并且只嵌入我们感兴趣的各种属性。因此,例如在一篇文章中,我们有一个喜欢那篇文章的用户数组,但数组中的每个元素只有用户的名称和用户名。显示帖子时,我们可以显示喜欢帖子的用户名列表,并使用用户名生成每个用户的链接。

需要考虑的事情是,如果用户更改他们的名字或用户名,那么你需要更新他们创建或喜欢的每一篇文章。我们不允许更改用户名,并且决定在我们的情况下更新名称不是必需的。

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

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

+0

你是如何继续限制数组的内容在用户的名称和用户名? – user2865790

+0

当用户喜欢帖子时,我们手动将只有名称和用户名的对象推送到数组上。 – Brett

+0

好的。我问这个是因为我相信我已经看到一种方法可以自动使用mongo来做这件事。但我找不到它了。 – user2865790