Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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
Ruby on rails 3 来自Rails应用程序的慢速Mongo查询时间>1000毫秒。。。优化的想法?_Ruby On Rails 3_Mongodb_Mongomapper - Fatal编程技术网

Ruby on rails 3 来自Rails应用程序的慢速Mongo查询时间>1000毫秒。。。优化的想法?

Ruby on rails 3 来自Rails应用程序的慢速Mongo查询时间>1000毫秒。。。优化的想法?,ruby-on-rails-3,mongodb,mongomapper,Ruby On Rails 3,Mongodb,Mongomapper,我们在Mongo 2.2和Rails 3.2.12上构建了一个Rails应用程序。我们是Mongo的新手,希望您能提供一些关于如何优化非常慢的查询(需要超过1000毫秒的查询)的建议 我们使用MongoMapper作为Mongo的接口 我们正在为这些表编制索引,但是否有办法确认我们的查询是否正确使用了这些索引?否则,我们如何才能找出缓慢的原因 下面是一天的慢速Mongo查询: 下面是对其中三个查询的解释:您的问题是架构设计、索引设计,可能还没有足够的资源来处理当前的负载—如果不先修复查询,就无法

我们在Mongo 2.2和Rails 3.2.12上构建了一个Rails应用程序。我们是Mongo的新手,希望您能提供一些关于如何优化非常慢的查询(需要超过1000毫秒的查询)的建议

我们使用MongoMapper作为Mongo的接口


我们正在为这些表编制索引,但是否有办法确认我们的查询是否正确使用了这些索引?否则,我们如何才能找出缓慢的原因

下面是一天的慢速Mongo查询:


下面是对其中三个查询的解释:

您的问题是架构设计、索引设计,可能还没有足够的资源来处理当前的负载—如果不先修复查询,就无法判断

<> P>在设计模式时,必须考虑如何访问读写数据。文档的结构和索引策略必须反映读写操作的需要。您当前的查询必须扫描数千个文档才能选择很少的文档-这反映了索引策略很差。有了有效的索引,您的查询应该能够使用索引来减少所需的文档数量,此外,如果必须进行排序,那么索引也应该支持这些排序


这不适合回答,因为您的问题不是缺少一个索引或使用了错误的查询类型。您需要根据应用程序的需要重新考虑架构设计和索引策略。

如何为查询编制索引?对不起,这意味着为表编制索引:否则,我们如何才能找出缓慢的原因?第一个和第三个查询使用$ne、$nin,这不利于索引,导致nscanned、nscannedObjects非常高。第二个查询是$in,这将非常快。因此,您必须在第1个和第3个查询中获取一些密钥,这将与第2个查询中一样具体。你想从我这里得到什么信息?我想问一个关于mongo的问题,@AbhishekKumar。谢谢。谢谢@asyakamsky。我们在设计模式时考虑了读写配置文件。这就是为什么我们将游戏嵌入到播放器文档中,因为我们通常同时访问这两个项目,并且我们被告知,只要只包含对象ID的游戏数组不扩展到1000个项目左右,它就是一个良好的体系结构。可以为时间戳编制索引吗?缓慢的查询正在寻找在过去几个小时左右做了一些事情的玩家。或者把这些活跃的玩家放在一个单独的集合中,然后扫描你所建议的那个单独的集合,这样做更好吗?当然可以对时间戳进行索引,但不要忘记,你需要一个复合索引来有效地缩小查询结果的范围。你在不断地向玩家推出新游戏吗?如果是这样的话,这是一个非常糟糕的设计,因为文档将不断增长,并且每次在磁盘上重新定位它都会导致碎片,加上所有索引都必须更新,导致更新性能很差。此外,您还按时间戳过滤,但按_id排序,为什么?无论如何,这不是一个很好的论坛来讨论这个问题——考虑把这个发布到MangoDB用户谷歌组。增长的数组很糟糕,尤其是如果它们是无界的,索引的。你应该把这个讨论交给谷歌组MangGDB用户。对于这种冗长的讨论来说,这是一个更合适的场所,而且它的形式比评论更简单。