什么表现更好?

时间:2016-02-01 06:15:44

标签: mongodb meteor database-design

我确实有'主题',每个'主题'都有'问题'。主题和问题都有“统计数据”,每次使用都会更新。

我应该将“问题”创建为“主题”文档的子字段吗?或者我必须创建一个名为“questions”的集合,并使用某种外键将其与“主题”相关联?

此外,使用独立的“问题”集合会使列出与主题相关的所有问题“更难/更昂贵”吗?

我是个女人

1 个答案:

答案 0 :(得分:1)

我会尝试尽我所能地回答这个问题,但您可能希望对您进行一些测试以确保它确实更好。

如果您不希望每个主题都有大量的问题,那么从技术上讲,您可以将它们作为一个数组包含在'主题中。文献。这使得查询特定主题的一组问题变得更容易,并且可能比问题和主题是其自己的集合更快。

但这样做有一个很大的缺点。假设您想要访问特定问题的特定内容。为了找到该问题,您需要知道它属于哪个主题,查询该特定主题,遍历该主题中的所有问题以找到匹配的主题,然后返回所请求的信息。或者,您可以在主题中跟踪数组中问题的索引,以便更快地访问,但这意味着可以访问您需要跟踪2个不同索引的任何问题。如果您想更新特定问题的任何内容,也是如此。

将问题和主题存储为自己的集合(使用topicID之类的共享密钥)将使您更容易访问/更新特定于问题和主题的任何内容。

现在关于访问问题时的表现。这取决于您加载数据的方式。如果您的应用程序通常一次只加载1个主题+相关问题,理论上如果您有单独的集合则会进行2次查询,如果您有问题嵌套在主题中,则会进行1次查询。如果您想访问特定问题,拥有单独的集合会更快。所以这一切归结为哪种操作最多发生。

请记住,正确的索引将有助于读取时间,除非您拥有一个庞大的数据集,并且有大量用户访问它,否则通过在主题中嵌套问题而获得的读取时间的边际收益可能是不值得的。