1
慢很多
我有以下代码:Sequelize查询比Knex
var apiLogger = require(__dirname + '/../configurations/logger').api;
var Knex = require('knex');
var microtime = require('microtime');
var Sequelize = require("sequelize");
database = new Sequelize('MYDATABASE', 'MYUSERNAME', 'MYPASSWORD', {
host: "MYHOST",
port: 3306,
dialect: 'mysql',
pool: {
maxConnections: 5,
maxIdleTime: 30
}
});
Knex.Initialize({
client: 'mysql',
connection: {
host : 'MYHOST',
user : 'MYUSERNAME',
password : 'MYPASSWORD',
database : 'MYDATABASE',
charset : 'utf8'
}
});
exports.test = function(req, res){
apiLogger.info('Request made to /api/test');
var start = microtime.nowDouble();
database.query('SELECT id, username FROM Users ORDER BY RAND() LIMIT 10').then(function(data) {
console.log('query time : ' + (microtime.nowDouble() - start));
res.json(data);
}, function(data) {
res.json(data);
});
};
exports.test2 = function(req, res){
apiLogger.info('Request made to /api/test2');
var start = microtime.nowDouble();
Knex.Raw('SELECT id, username FROM Users ORDER BY RAND() LIMIT 10').then(function(data) {
console.log('query time : ' + (microtime.nowDouble() - start));
res.json(data);
}, function(data) {
res.json(data);
});
};
如果我执行在exports.test
代码(的/api/test
API调用)约5秒彼此分开,平均响应大约是430ms,这是Sequelize代码。
如果我运行exports.test2
(和api调用/api/test2
)5秒钟的代码,第一个电话是430ms,但之后的电话约为100ms,那就是Knex。
如果我运行exports.test
代码小于第二彼此分开,我得到了100ms左右的响应时间,我应该提,并与exports.test2
代码,我可以呼叫之间等待2-3分钟,仍然获得了100毫秒响应时间。
是否有某种配置我缺少Sequelize,导致它比Knex慢得多?为什么请求与Knex分开的时间要比Sequelize与秒钟相同的请求快得多?
大概缓存... – Namphibian
嗯,我怀疑Knex是因为缓存我做ORDER BY RAND(),使每个请求不同的结果。我明白为什么每个查询的第一个查询需要更长的时间,这是因为MySQL在第一个请求后缓存了数据,但是如果它是MySQL缓存,两个库都将受益,除非Sequelize强制MySQL不使用缓存,不知道这是否是可能的和B,这没有什么好的理由。 – ryanzec