Sails.js蓝图路由和本机SQL查询之间的巨大性能差异

时间:2015-08-09 13:33:02

标签: sails.js waterline sails-postgresql

我正在为特定项目使用风帆版本0.10.5。我们使用postgresql作为底层数据库,其大小为几GB。最近我开始注意到一个问题。有一个postgres表,其模型定义如下:

module.exports = {

  attributes: {

    user: {
      model: "user",
      required: true
    },

    organization: {
      model: "organization",
      required: true
    },

    questionaire: {
      model: "questionaire",
      required: true
    },

    mailinglist: {
      model: "mailinglist",
      defaultsTo: null
    },

    name: {
      type: "string",
      required: true
    },

    broadcast: {
      type: "boolean",
      defaultsTo: false
    },

    link: {
      type: "string",
      defaultsTo: null
    },

    count: {
      type: "integer",
      defaultsTo: 0
    }


  }
};

当我使用控制器的蓝图路线时,网址如下:

GET / api / survey?broadcast = false& organization = 2

返回结果花了30多秒。我有两个在postgres中索引的列,并且还有一个使用这两列的复合索引。此外,当我在postgres中运行查询时,它以毫秒为单位返回结果。所以,我很困惑为什么通过蓝图路线需要这么长时间。

所以,我通过在控制器中覆盖它来修改路径:

  find: function (req, res){
    var packet = req.params.all();
    var myQuery = "select * from survey where 1=1 ";
    Object.keys(packet).forEach(function (key){
      myQuery += " and "+ key + " = " + packet[key] + " "
    })
    Survey.query(myQuery, function (err, result){
      if(err){
        return res.json(500, err);
      }
      else{
        return res.json(200, result.rows)        
      }
    })
  },

然后我可以通过这种方式获得极快的性能。所以我的问题是,如果性能是一项要求我是否应该避免使用Waterline的方法,或者我的模型定义或其他任何地方是否有任何错误?

0 个答案:

没有答案