0

即使在索引字段上计算查询匹配的集合中的记录数也需要太多时间。例如,假设有一个包含 10000 条记录的集合,并且该集合的 creationDate 字段上有一个索引。从集合中获取最后十条记录比计算最后一天创建的记录数要快。返回计数查询的结果需要超过 5 秒,有时甚至长达 70 秒。你知道如何解决这个问题,解决这个问题的最佳方法是什么?

顺便说一句,我们也使用了 morphia,我们看到通过 morphia 获取计数更慢,所以对于计数查询,我们将 morphia 查询转换为 java 驱动程序查询。有没有人遇到过类似的情况,为什么吗啡反应更慢?这仅发生在计数查询中还是与仅使用 java 驱动程序相比通常很慢?

非常感谢您的帮助、建议或解决方法,我们的应用程序严重依赖计数查询,而且系统的缓慢现在对我们来说真的很烦人。

提前致谢。

4

2 回答 2

1

虽然这可能不是最终答案,但让我们开始并进一步发展:

  1. 您的索引应始终适合 RAM,否则您将获得非常糟糕的性能。

  2. 要评估使用了多少 RAM,您可以使用 10gen 的 MMS 或使用各​​种工具进行检查。有关低(常驻)内存使用率的描述以及可能的原因,请参阅http://www.kchodorow.com/blog/2012/05/10/thursday-5-diagnosing-high-readahead/。或者您只是还没有访问足够的数据,在这种情况下您可以使用MongoDB 的触摸(但我怀疑这一点,因为您已经遇到了性能问题)。

除了添加 RAM 并确保使用所有可用的 RAM 之外,您还可以删除未使用的索引或尽可能使用复合索引。

于 2012-12-28T16:16:21.153 回答
0

等待修复。

正如 Asya Kamsky 评论的那样,计数性能在 2.2 上非常糟糕。我们发现的唯一解决方法是尽可能避免使用它们。

(mongodb 还有其他一些无法解释的缓慢的事情——例如聚合查询——其中大多数都与 JIRA 问题相关并且正在处理/计划中)

于 2012-12-28T16:30:46.610 回答