计算即使在索引字段上与查询匹配的集合中的记录数也会花费太多时间。例如,假设有一个由10000条记录组成的集合,并且该集合的creationDate字段有一个索引。从集合中获取最后十条记录比计算最后一天创建的记录数要快。返回计数查询的结果需要5秒以上,有时甚至最多70秒。您是否知道如何解决此问题,解决此问题的最佳方法是什么?
顺便说一句,我们也使用morphia,我们看到通过morphia获取计数的速度更慢,因此对于计数查询,我们将morphia查询转换为java驱动程序查询。有没有人遇到类似的情况,为什么吗啡反应更慢?这只会发生在计数查询中吗?或者与仅使用java驱动程序相比,它是否会缓慢?
我们非常感谢帮助,建议或解决方法,我们的应用程序在很大程度上依赖于计数查询,系统的缓慢对我们来说真的很烦人。
提前致谢。
答案 0 :(得分:1)
虽然这可能不是最终答案,但让我们开始并进一步发展:
您的索引应始终适合RAM,否则会导致性能非常差。
要评估使用多少RAM,您可以使用10gen的MMS或使用various tools进行检查。有关低(驻留)内存使用的可能原因的说明,请参阅http://www.kchodorow.com/blog/2012/05/10/thursday-5-diagnosing-high-readahead/。或者您根本没有访问足够的数据,在这种情况下您可以使用MongoDB's touch(但我怀疑,因为您已经遇到了性能问题)。
除了添加RAM并确保使用所有可用的RAM之外,您还可以删除未使用的索引或尽可能使用复合索引。
答案 1 :(得分:0)
等待修复。
Asya Kamsky评论说,2.2的表现非常糟糕。我们发现的唯一解决方法是尽可能避免使用它们。
(mongodb还有其他一些无法解释的问题 - 例如聚合查询 - 其中大多数都有相关的JIRA问题,正在进行工作/计划)