Концептуальная разница 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, время: 19:46. |