Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 带有查询的Mongodb计数的性能较差_Performance_Mongodb_Morphia_Mongodb Query_Mongo Java - Fatal编程技术网

Performance 带有查询的Mongodb计数的性能较差

Performance 带有查询的Mongodb计数的性能较差,performance,mongodb,morphia,mongodb-query,mongo-java,Performance,Mongodb,Morphia,Mongodb Query,Mongo Java,计算集合中由查询匹配的记录数(即使是在索引字段上)花费的时间太长。例如,假设有一个由10000条记录组成的集合,并且该集合的creationDate字段上有一个索引。从集合中获取最后十条记录比计算最后一天创建的记录数要快。返回计数查询结果需要5秒以上,有时甚至长达70秒。你知道如何解决这个问题吗?解决这个问题的最好方法是什么 顺便说一句,我们还使用了morphia,我们发现通过morphia获得计数的速度更慢,因此对于计数查询,我们将morphia查询转换为java驱动程序查询。有没有人遇到过类

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

顺便说一句,我们还使用了morphia,我们发现通过morphia获得计数的速度更慢,因此对于计数查询,我们将morphia查询转换为java驱动程序查询。有没有人遇到过类似的情况,为什么morphia的反应更慢?这种情况是否只发生在计数查询中,或者与仅使用java驱动程序相比,它通常比较慢

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


提前感谢。

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

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

  • 要评估使用了多少RAM,您可以使用10gen的彩信,也可以通过查看。有关说明以及内存使用率低(驻留)的可能原因,请参阅。或者您只是还没有访问足够的数据,在这种情况下您可以使用(但我怀疑这一点,因为您已经有了性能问题)

  • 除了添加RAM并确保使用所有可用的RAM外,还可以删除未使用的索引或在可能的情况下使用复合索引。

    等待修复

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


    (mongodb还有其他速度慢得无法解释的事情——比如聚合查询——其中大多数都有相关的JIRA问题,正在处理/安排)

    并且计数查询使用的是索引?什么MongoDB版本?什么Java驱动程序版本?你能解释一下计数的查询用途吗?这应该让我们开始对itMongodb版本:2.2、java驱动程序:2.7.3(我应该仔细检查)、morphia 0.99进行故障排除。我们在查询中使用的字段上有一个索引。基本上,我在索引字段上有一个简单的日期范围查询,我们在集合上调用countAll函数。我现在不在办公室,我稍后也会发布解释查询。Morphia 0.99已经很老了。您是否考虑过更新到,其中包括一些修补程序?不确定这是否有助于提高性能,但这不应该造成伤害。查询的
    .explain()
    输出应该有助于找到根本问题-该查询不应该花费那么长的时间。下一个版本(2.4)将显著提高计数的性能。参见
    “游标”:“b游标更新日期”,“isMultiKey”:false,“n”:52221,“nscannedObjects”:52221,“nscannedObjects”:52221,“nscannedObjects”:52221,“nscannedAllPlans”:52221,“扫描者”:false,“indexOnly”:false,“nYields”:396,“nChunkSkips”:0,“millis”:14713,“indexBounds”:{“ua”:[[ISODate]:(“2012-12-17T22:00:00Z”),ISODate(“2012-12-28222:00:00Z”)]]
    我们将尝试使用复合索引,似乎我们的大多数索引都没有被使用,因为我们的大多数查询都是由日期字段和另一个字段组成的,因为我们在各个字段上都有索引。感谢这篇关于低内存使用率的文章,它也与我们的情况类似,我们将把这篇文章中的建议纳入account.博客中的建议就像一个charm=)我们还看到,我们的大多数索引在转换成复合索引之前根本没有被使用,现在系统工作效率很高,感谢建议和帮助=)似乎除了mongo的计数问题之外,主要问题在于我们自己的架构,我们需要我们将重新评估我们的系统,选择正确的索引对我们来说似乎至关重要。顺便说一句,我们期待新的版本,看看计数和聚合框架的性能如何。