Я пытаюсь реализовать приложение Node.js, которое позволило бы большому количеству одновременно работающих пользователей вставлять данные в базу данных.Я использую Knex для обработки соединений с базой данных.Моя цель - позволить серверу асинхронно обрабатывать миллионы запросов от миллионов пользователей.Я использую MySQL NDB Cluster 7.5.В настоящее время я использую инструмент ab test для стресс-тестирования приложения, но я застрял со следующей ошибкой:
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,
},
},
};