【问题标题】:What will perform better? [closed]什么会表现得更好? [关闭]
【发布时间】:2016-05-09 12:32:19
【问题描述】:

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

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

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

我太菜了

【问题讨论】:

  • 您可能希望更具体地了解“表现更好”的含义。性能将取决于您计划对数据执行的操作(您会经常更新它们吗?主要是阅读它们?两者兼而有之?)。此外,是否存在您想直接访问问题的情况?您如何存储统计信息?
  • 嗨 Ting Sun,每次发布“问题”时,其统计信息字段都会更新。但是,“主题”统计数据也在更新。例子:猫有几只耳朵?发布此问题意味着更新问题统计字段以及“猫”主题统计字段

标签: mongodb meteor database-design


【解决方案1】:

我会尽力回答这个问题,但您可能希望自己做一些测试,以确保它实际上更好地工作。

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

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

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

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

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

【讨论】:

  • 最后我决定将问题存储在主题文档中。我这样做是因为它们主要按主题分组。不确定,但是,如果更新所有问题的统计数据将是一项缓慢的任务
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多