寻求帮助了解Mongodb数据组织

时间:2011-06-24 16:13:27

标签: mysql mongodb database-design database nosql

我试图理解文档存储的概念,但没有看到它如何适用于某些情况。例如,在CMS /博客引擎的情况下,可能存在以下形式的数据:

  • 帖子
  • 类别
  • 用户
  • 评论

在诸如MySQL之类的东西中,每个人可能有一个表,然后是每组相关数据的连接表。即posts_tablecategories_tablecategories_posts_table

在这种情况下,posts_table将包含帖子数据,categories_table将包含类别数据,categories_posts_table将包含用于将特定类别与特定帖子相关联的2个外键。

这如何转化为像mongodb这样的东西?

我能看到这个设置在mongo中构建的唯一方法是:

  • posts_collection

单个bson文档的输出可能类似于:

  {
     "title" : "title",
     "body" : "blah body",
     "categories" : [
                 "category1",
                 "category2"
               ]
  }

这是有道理的,但似乎各个类别都会被重复。如果没有某种关系,您永远无法简单地更改类别名称并将其反映在所有博客帖子中(?)。

另外如果这些像二进制文件占用了大量空间呢?它不是一遍又一遍地重复相同的图像,而是一种关系会更好地发挥作用吗?

我想这是一个非常开放的问题,但我正在寻找任何人的意见,我应该如何在心理上分解一个问题,告诉它是否应该适合像mongo这样的数据库。同样重要的是如何正确地构建数据?

我没有涉及用户,但似乎这里的一切最终都会最终成为用户集合中的嵌入式文档,因为用户可以启动所有内容。

非常感谢。

1 个答案:

答案 0 :(得分:3)

文档数据库的有趣之处在于您确实需要考虑如何使用数据。在多个地方存储相同的信息(非规范化)在文档数据库中很好。所以当你说你可以拥有一个包含其他所有内容的根User文档时,你就是对的。

根据我有限的经验,没有一种“正确”的方式来模拟特定的数据集,更多的是关于将来如何使用这些数据。

可以参考其他文件。例如,如果您想要Posts个集合,并且每个Post引用User集合中的Users文档。请查看有关Embed vs. Reference

的这篇文章