我正在和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”?)
是不是节省了文档中的渣是浪费空间(考虑到关系总是一样的?),并且在查询集合时可能会产生性能开销?
你会怎么做?
答案 0 :(得分:0)
这取决于你想要完成的任务。在RDBMS中,您将以 n 正常形式搜索一个真正的数据结构。对于文档存储中的特定数据集没有这种“正确”的数据结构 - 为了找到一个好的数据结构,你必须问自己:我的查询是什么样的?我会比我插入更频繁地阅读吗?
例如,嵌入有问题的查询将是:“显示已使用的标签,按人气排序”,或者更糟糕的是“显示我的朋友按人气排序使用的标签”。要快速执行前一个查询,您必须跟踪可用标记和其他位置的引用数。对于后者,您应该使用RDBMS。
标记是我经常去嵌入的极少数情况之一,因为通常标记不会经常更改,并且不需要某种参照完整性(即你可以'改变'标签')。但这取决于你在标记什么以及谁在做它。
我也不明白slug
有什么用处:如果你需要搜索的东西,你可以简单地删除特殊的字符和空格,并在插入时将其设为小写字符串?