我试图理解文档存储的概念,但没有看到它如何适用于某些情况。例如,在CMS /博客引擎的情况下,可能存在以下形式的数据:
在诸如MySQL之类的东西中,每个人可能有一个表,然后是每组相关数据的连接表。即posts_table
,categories_table
,categories_posts_table
在这种情况下,posts_table
将包含帖子数据,categories_table
将包含类别数据,categories_posts_table
将包含用于将特定类别与特定帖子相关联的2个外键。
这如何转化为像mongodb这样的东西?
我能看到这个设置在mongo中构建的唯一方法是:
单个bson文档的输出可能类似于:
{
"title" : "title",
"body" : "blah body",
"categories" : [
"category1",
"category2"
]
}
这是有道理的,但似乎各个类别都会被重复。如果没有某种关系,您永远无法简单地更改类别名称并将其反映在所有博客帖子中(?)。
另外如果这些像二进制文件占用了大量空间呢?它不是一遍又一遍地重复相同的图像,而是一种关系会更好地发挥作用吗?
我想这是一个非常开放的问题,但我正在寻找任何人的意见,我应该如何在心理上分解一个问题,告诉它是否应该适合像mongo这样的数据库。同样重要的是如何正确地构建数据?
我没有涉及用户,但似乎这里的一切最终都会最终成为用户集合中的嵌入式文档,因为用户可以启动所有内容。
非常感谢。
答案 0 :(得分:3)
文档数据库的有趣之处在于您确实需要考虑如何使用数据。在多个地方存储相同的信息(非规范化)在文档数据库中很好。所以当你说你可以拥有一个包含其他所有内容的根User
文档时,你就是对的。
根据我有限的经验,没有一种“正确”的方式来模拟特定的数据集,更多的是关于将来如何使用这些数据。
可以参考其他文件。例如,如果您想要Posts
个集合,并且每个Post
引用User
集合中的Users
文档。请查看有关Embed vs. Reference。