最近使用sequelize模块操作mysql,具体sequelize配置如下:
const Sequelize = require('sequelize');
const sequelize = new Sequelize('users', 'root', 'root', {
host: '192.168.20.131',
dialect: 'mysql',
pool: {
max: 5,
min: 0,
idle: 10000
}
});
//测试数据库链接
sequelize.authenticate().then(function() {
console.log("数据库连接成功");
}).catch(function(e) {
//数据库连接失败时打印输出
console.log(e);
});
exports.sequelize = sequelize;
新增的api也很简单:
router.post('/', function(req, res, next) {
var user = User.build(req.body);
user.save().then(function(result) {
res.json({
status: 1,
data: result
});
}).catch(function(err) {
throw err;
});
});
可以看到如下图,插入一条数据达到了离奇的150+ms,不知道哪里出错了,求解啊啊啊啊。。。。
难道是我数据库的问题?????
你是怎么判断时间耗在了数据库的插入上的 这个时间不是你在postman上用的总耗时吗?
@hezhongfeng 说的很有道理… lz可以在save之前来个时间戳, then里面计算下就知道耗时了
也许是数据库的连接上慢呢?没表现出是插入的问题吧
@danielsss 我试试
@hezhongfeng 时间还是有点长
@caiya User.build(req.body) 有点不靠谱,你把你需要的东西提取出来保存试试啊!
@danielsss 改成这样子了,不过还是有点慢,估计就是我机子配置不行吧
@caiya 数据库是本地还是远程连接 ?
@danielsss 上面测试都是本地的库
还有个问题想求解下,使用sequelize实现关联映射时,调用sync()会自动生成对应的数据库表,如果在sequelize中配置了关联关系,则会自动生成一个表外键,如果不想生成物理外键约束,仅仅生成一个逻辑外键怎么配置呢?
找到了,在每个model配置的时候有一个references类型,可以直接配置不带约束的外键引用:
// 在调用Trainer.hasMany(series)方法的,Series 有一个 trainer_id=Trainer.id 的外键引用
Series = sequelize.define('series', {
title: DataTypes.STRING,
sub_title: DataTypes.STRING,
description: DataTypes.TEXT,
// Set FK relationship (hasMany) with `Trainer`
trainer_id: {
type: DataTypes.INTEGER,
references: {
model: "trainers",
key: "id"
}
}
})
上面不带约束的这种写法实际数据库还是生成了外键约束,这个怎么求解呢