你应该在MongoDB中嵌入多少?

时间:2011-11-17 08:28:11

标签: mongodb

我正在和mongodb一起玩,我发现自己一直在想RDBMS,我需要你的帮助才能让我的头脑远离它。

所以我有一份我想要标记的文件。正如每个文档/示例所提到的,我将在文档上嵌入标记。然而,我的下一个将是,在哪里保存slug(从那个标签)。

应该在每个文档中而不是保存类似

的内容
["tag1", "this is tag 2"]

将其保存为:

[{ "slug": "tag1", "tag": "tag1" }, { "slug": "this-is-tag-2", tag: "this is tag 2" }]

或者我应该有另一个包含slug匹配的唯一标签的集合吗? (因此,在获取所有带有slug的文件之前必须首先查询“this-is-a-tag-2”?)

是不是节省了文档中的渣是浪费空间(考虑到关系总是一样的?),并且在查询集合时可能会产生性能开销?

你会怎么做?

1 个答案:

答案 0 :(得分:0)

这取决于你想要完成的任务。在RDBMS中,您将以 n 正常形式搜索一个真正的数据结构。对于文档存储中的特定数据集没有这种“正确”的数据结构 - 为了找到一个好的数据结构,你必须问自己:我的查询是什么样的?我会比我插入更频繁地阅读吗?

例如,嵌入有问题的查询将是:“显示已使用的标签,按人气排序”,或者更糟糕的是“显示我的朋友按人气排序使用的标签”。要快速执行前一个查询,您必须跟踪可用标记和其他位置的引用数。对于后者,您应该使用RDBMS。

标记是我经常去嵌入的极少数情况之一,因为通常标记不会经常更改,并且不需要某种参照完整性(即你可以'改变'标签')。但这取决于你在标记什么以及谁在做它。

我也不明白slug有什么用处:如果你需要搜索的东西,你可以简单地删除特殊的字符和空格,并在插入时将其设为小写字符串?