相关疑难解决方法(0)

使用sequelize.js 和mysql 的性能非常差

我正在开发一个节点后端,使用feathers.js框架和sequelize.js作为数据库适配器。

总的来说,我注意到从后端查询数据时性能非常糟糕。性能最差的示例是对具有约 25 列和 10,000 个条目的表的查询。我可以使用 mysql 工作台在 0.013 秒 + 0.352 秒的获取时间(网络)内查询该表中的每个条目。当使用sequelize查询相同的查询时,查询完成平均需要2.5秒(隔离请求)。Feathers-sequelize 包用于通过命令行自动生成包括数据库请求在内的服务。

  • 节点 v8.10.0
  • 羽毛续集 v3.1.3
  • 续集 v4.42
  • mysql-服务器 v5.6

我已经尝试增加连接池sequelize能够使用但没有成功。

我在测试示例中查询时没有任何附加参数或连接。

app.service(service_name).find();

调试时会导致sequelize 调用

sequelize.models.service_name.findAll();

我意识到从数据库的二进制数据到 JSON 的转换需要一些时间,但我认为应该可以在 0.4 秒内执行此请求。

javascript mysql sequelize.js

5
推荐指数
1
解决办法
4565
查看次数

SequelizeJS中的缓慢关联

我正在尝试诊断我的Express应用程序中使用SequlizeJS作为ORM的一些减速原因.我有一个模型,与其他2个模型有2x hasMany和aOne关系:

更新:我使用classMethods #association函数在define调用中建立了关联.

// Model1
classMethods: {
    associate: function(models) {
        Model1.hasMany(models.Model2);
        Model1.hasMany(models.Model3);
        Model1.hasOne(models.Model2, {as: 'next', foreignKey: 'model2_next'});
    }
}

// Model2
classMethods: {
    associate: function(models) {
        Model2.belongsTo(models.Model1, {foreignKey: 'model2_next'});
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我按以下方式查询它们:

db.Model1.find({
    where: { /* Simple where statement */ },
    include: [
        db.Model2,
        db.Model3,
        { model: db.Model2, as: 'next' },
    ]
}).complete(function(err, data) {
    res.json(data);
});
Run Code Online (Sandbox Code Playgroud)

响应可能需要8-12秒.但是,如果我单独查询Model2并使用async和lodash库手动合并它们:

async.parallel({
    model2: function(callback) {
        db.Model2.findAll({
            where: { /* Simple where statement */ }
        }).complete(callback)
    },
    model1: function(callback) {
        db.Model1.find({
            where: …
Run Code Online (Sandbox Code Playgroud)

mysql postgresql node.js sequelize.js

3
推荐指数
2
解决办法
3939
查看次数

标签 统计

mysql ×2

sequelize.js ×2

javascript ×1

node.js ×1

postgresql ×1