Прежде всего, я знаю, что есть несколько подобных вопросов, но они не отвечают на то, что мне нужно, поэтому позвольте мне открыть этот новый :)nodejs + mysql: когда использовать объединенные соединения?
Во-вторых, этот вопрос сфокусирован на mysql, но не ограничивается этим. он, применяя также к другим объединенным службам, таким как memcached.
Насколько я знаю, nodejs выполняет сценарии однопоточными, но может создавать потоки, поэтому он может управлять одновременными пользователями на сервере. Вот почему имеет смысл создавать пул соединений.
Проблема возникает, когда у меня есть этот тест апи служил курьерским, и я выполняю следующий код тестов:
ab -t 30 -c 1000 localhost/test
дает мне следующий результат для одного-прямого подключения к базе данных:
Requests per second: 1732.07 [#/sec] (mean)
Time per request: 577.344 [ms] (mean)
В пуле тузд только 1 подключение:
Requests per second: 1346.24 [#/sec] (mean)
Time per request: 742.811 [ms] (mean)
И используя бассейн со 100 соединениями:
Requests per second: 662.82 [#/sec] (mean)
Time per request: 1508.716 [ms] (mean)
Какой должен быть обратный, не так ли? объединенное соединение с лучшей производительностью.
Я знаю, что объединение управления требует своего времени (но не должны быть значительными), а запрос SQL является очень простой, но ... ИДК ...
В API-то вроде этого:
function test(response, request, dbc) {
dbc.query(SQL, PARAMS, (err, rows) => {
dbc.release();
if(err) {
log.error('Error while performing the query', err.code);
return;
}
response.send(response, rows);
});
}
где dbc
является подключение к базе данных отведенную для одиночных/пула соединений и dbc.release()
не делает ничего, если соединение не из пула (чтобы один и тот же апи работу на прямых/объединенных соединений с тем же кодом, просто изменив параметр).
Я что-то упустил?
Да, это то, что я говорил о том, что запрос очень прост, возможно, это проблема ... но разница в производительности (3x) слишком велика. Это странно ... – danikaze