我正在尝试实现一个允许大量并发用户将数据插入数据库的Node.js应用程序。我正在使用Knex来处理数据库连接。我的目的是允许服务器异步处理来自百万用户的百万个请求。我正在使用MySQL NDB Cluster 7.5。目前我正在使用ab测试工具对应用程序进行压力测试,但我遇到了以下错误:
ab -p 100.json -T application/json -c 1000 -n 1000 http://34.242.xxx.xxx:3000/insert
Benchmarking 34.242.xxx.xxx (be patient)
apr_socket_recv: Connection reset by peer (104)
从服务器我发现以下错误:
Unhandled rejection Error: ER_CON_COUNT_ERROR: Too many connections
goofy_noyce.1.f7o2c2dp6sb8@ip-172-31-xxx-xxx
这是我正在使用的代码:
const knex = require('knex')(require('../knexfile.js')
const insertData = function (tableName, timestamp, deviceId, data) {
debug('insert');
knex(tableName).insert({
timestamp,
deviceId,
data,
})
.catch(err => debug(`error: ${err}`))
.then((dataid) => {
debug(`Inserted with id: ${dataid}`);
});
};
....
insertToDb(req.body.tableName, req.body.timestamp, req.body.deviceId, req.body.data);
res.status(201).json({ success: true });
这是knexfile:
const config = require('./config/config');
module.exports = {
production: {
client: 'mysql',
connection: {
host: config.mysql_ip,
database: config.mysql_database,
user: config.mysql_user,
password: config.mysql_pass,
},
pool: {
min: 2,
max: 10,
},
},
};