Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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

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 为什么collections.find({})对250个对象占用9秒(MongoMapper)_Ruby_Ruby On Rails 3_Mongodb_Mongomapper - Fatal编程技术网

Ruby 为什么collections.find({})对250个对象占用9秒(MongoMapper)

Ruby 为什么collections.find({})对250个对象占用9秒(MongoMapper),ruby,ruby-on-rails-3,mongodb,mongomapper,Ruby,Ruby On Rails 3,Mongodb,Mongomapper,我正在运行以下查询,返回结果平均需要9秒。它没有过滤器,所以我不确定索引是否有用。为什么跑得这么慢?其中只有250个对象,只有4个字段(全部为文本) 机器上的cpu、内存和磁盘甚至没有注意到查询的运行。任何帮助都将不胜感激 使用以下方法在“国家/地区名称”字段上创建索引: db.countries.ensureIndex({country_name:1}); 这将大大加快您的查询速度 您可以了解有关索引的更多信息 PS- 您可以键入“it”以在看到“has more”短语时显示更多信息,也可以

我正在运行以下查询,返回结果平均需要9秒。它没有过滤器,所以我不确定索引是否有用。为什么跑得这么慢?其中只有250个对象,只有4个字段(全部为文本)


机器上的cpu、内存和磁盘甚至没有注意到查询的运行。任何帮助都将不胜感激

使用以下方法在“国家/地区名称”字段上创建索引:

db.countries.ensureIndex({country_name:1});
这将大大加快您的查询速度 您可以了解有关索引的更多信息

PS- 您可以键入“it”以在看到“has more”短语时显示更多信息,也可以使用以下命令显示不带“has more”的所有结果:

db.countries.find({}, {'country_name' : 1, 'country_code' : 1}).forEach(printjson)
>use databaseName;
> db.setProfilingLevel(2); // 2 tell the profiler to catch everything happened inside the DB
并且,您始终可以使用以下命令设置探查器:

db.countries.find({}, {'country_name' : 1, 'country_code' : 1}).forEach(printjson)
>use databaseName;
> db.setProfilingLevel(2); // 2 tell the profiler to catch everything happened inside the DB
您可以了解有关探查器的更多信息

您可以使用

> db.system.profile.find()

此方法将为您提供有关数据库和内部情况的更多信息。

您是否尝试在mongo shell中运行相同的查询?不,老实说,我在mongo shell中没有太多经验,我需要进行哪些语法更改,以便将其视为相同的查询?类似于:
db.countries.find({},{'country\u name':1,'country\u code':1})
好的,在mongo shell中,使用'has more'标记立即运行前20条记录的查询响应。如果我运行explain(),我会得到:
“cursor”:“BasicCursor”,“nscanned”:247,“nscannedObjects”:247,“n”:247,“millis”:0,“nYields”:0,“nchunkSkips”:0,“isMultikey”:false,“indexOnly”:false,“indexBounds”:{}
那么,mongomapper内部出现了什么问题导致了这样的延迟?谢谢,运行db.countries.find({},{'country\u name':1,'country\u code':1})。forEach(printjson)在shell中执行并在毫秒内返回所有结果,正如我所期望的mongo。我将在我的ruby堆栈上安装一个探查器,看看是什么导致了一个查询,该查询应在毫秒内执行,并在秒内执行。让我知道,如果创建索引加快了查询速度,这是mongodb中的一个很好的功能。遗憾的是,这不是,但它可以我们发现这不是mongo,而是ruby驱动程序和to_json让事情变得慢了下来。我最终缓存了json结果,它工作得非常好。现在整个ajax调用在70ms内完成了端到端,很高兴听到现在一切都很好!如果您有更多问题,请发布更多!