对于mongo查询,Rails app需要超过30秒的时间

时间:2016-09-14 05:51:49

标签: ruby-on-rails ruby mongodb csv

我在远程有一个mongo数据库,有一个名为 con_v 的集合,这里是一个对象的预览。

{
    "_id" : ObjectId("xxxxxxx"),
    "complete" : false,
    "far" : "something",
    "input" : {
        "number_of_apples" : 2,
        "type_of_apple" : "red"
    },
    "created_at" : ISODate("xxxxx"),
    "error" : false,
    "version_id" : ObjectId("someID"),
    "transcript" : "\nUser: \nScript: hello this is a placeholder script.\nScript: how many apples do you want?\n",
    "account_id" : null,
    "channel_id" : ObjectId("some channel ID"),
    "channel_mode_id" : ObjectId("some channel mode ID"),
    "units" : 45,
    "updated_at" : ISODate("xxxx")
}

我正在使用rails app从远程mongo db进行查询,如果我提取20-50条记录它的响应但我一次需要超过1000条记录,我有一个函数从该记录创建csv文件,之前它工作正常,但现在它比平常花费更长时间并冻结服务器(总记录数约为30K)。直接通过mongo shell或使用rails控制台,查询正在花时间。如果我在本地机器应用程序中使用克隆数据库工作正常,那就相同了。

这是模型文件中的代码,用于查询和生成csv文件

  def self.to_csv(con_v)
    version = con_v.first.version
    CSV.generate do |csv|
      fields = version.input_set_field_names
      extra_fields = ['Collected At', 'Far', 'Name', 'Version','Completed']

      csv << fields + extra_fields
      con_v.each do |con|
        values = con.input.values_at(*fields)
        extra_values = [
          con.created_at,
          con.units,
          con.far,
          version.name,
          con.complete
        ]
        csv << values + extra_values
      end
    end    

坚持壳是应用程序在远程数据库上花费更长时间,非常慢的mongo查询但是在本地数据库中工作正常,使用pry调试,控制器代码很好它获取记录以及远程响应时间很慢< /强>

0 个答案:

没有答案