MongoDB:您是否仍然提供链接到其他集合的ID或仅包含集合?

Mat*_*att 5 mongodb nosql

我对MongoDB和NoSQL很新.我有一个集合主题,每个主题可以有很多评论.每条评论都会有元数据,以及使评论集合有用.

在MySQL中我会使用外键链接到的意见表,但在NoSQL的我应该只是包括主题集合中的一个集合的评论或有它是在一个单独的收集和链接通过IDS?

谢谢!马特

Ian*_*cer 8

这取决于.

这取决于您期望拥有的每种类型对象中的多少.对于给定的主题,您能将它们全部放入一个MongoDB文档中吗?可能不是.

这取决于关系 - 你有一对多或多对多的关系吗?如果它是一对多且相关实体的数量很小,您可以选择将它们嵌入到文档中的IList中.如果它是多对多的,你可能会选择使用更传统的关系,或者你可能选择将双方都嵌入为IList.

您仍然可以使用单独的集合在MongoDB中建模关系但是数据库中没有连接,因此您必须在代码中执行此操作.从性能角度来看,加载主题然后加载注释可能会很好.

其他提示:

使用MongoDB,您可以在文档上索引INTO数组.因此,不要将Index视为文档上简单字段的索引(如SQL).例如,您可以在主题上使用标记集合并将其编入索引.(参见http://www.mongodb.org/display/DOCS/Indexes#Indexes-Arrays)

检索或写入数据时,可以对任何文档进行部分读取和部分写入.(参见http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields)

最后,当您无法使用集合和索引查看如何获得所需内容时,您可以使用map reduce实现它.例如,要查找当前正在使用的所有标签按其使用频率排序,您将映射每个主题,发出其中使用的标签,然后您将减少该集合以获得所需的结果.然后,您可以永久存储该地图的结果,并在需要时仅将其更新.

从关系思维转变是一个相当重要的思维转变,但如果你需要NOSQL方法带来的可扩展性和灵活性,这是值得的.