Концептуальная разница connection и pool модуля mysql
Всем добра!
никак не могу нагуглить, в чем состоит отличие функций методов подключения к mySQL (модуль mysql) connection и pool. в документации вопрос не раскрыт. исходя из логики, pool предназначен для параллельной работы множества соединений с БД. но я не могу понять, чем хуже такой вариант:
var WebSocketServer = new require('ws');
var mysql = require('mysql');
var webSocketServer = new WebSocketServer.Server({port: 8081});
webSocketServer.on('connection', function(ws)
{
ws.on('message', function(queryString)
{
var connection = mysql.createConnection(
{
host : 'xxx',
user : 'bob',
password : 'secret',
database : 'xxx'
});
connection.query(queryString, function(err, result)
{
//some function
});
connection.end();
});
ws.on('close', function()
{
delete ws;
});
});
я не силен в терминологии, но в таком коде при каждом обращении создается "экземпляр" функции function(queryString) обработчика события ws.on('message'. если я не ошибаюсь, все "экзепляры" функции работают асинхронно, с собственной областью видимости, независимо друг от друга, и, соответственно, с собственным подключением к БД. здесь есть какие-то подводные камни? зачем все-таки нужен pool? |
Вы устанавливаете соединение с базой данных на каждом запросе к вашему серверу. Это очень дорогая операция.
Connection pool - это стандартный патерн. Фишка в том, что при запросе к вашему серверу готовое соединение берется из connection pool, который существует глобально (в том смысле что он уже где-то создан и поддерживается между запросами). Воспользуйтесь какой-нибудь библиотекой, которая поддерживает connection pool. Например, http://knexjs.org - там заодно и query builder есть - не писать же sql строками в 21 веке... |
Спасибо за ответ!
но меня интересовало прежде всего отличия connection от pool. connection можно так же создать глобально и обращаться к нему по мере необходимости. однако в этом случае возникает проблема. при наличии готового соединения, по инициативе mySQL происходят отключения этого соединения по тайм-ауту при бездействии определенное время. при этом node.js сервис крашится. Подозреваю, при использовании pool будет происходить то же самое. создание подключения внутри обработчика обращений к серверу избавляет от этой проблемы. и здесь, похоже не играет роли то, каким способом идет подключение. библиотеки не люблю. не хочется включать в проект поезд для перевозки пары килограммов груза. sql строки тоже не использую. у меня все взаимодействие с БД осуществляется через хранимые процедуры. |
| Часовой пояс GMT +3, время: 06:10. |