Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.03.2016, 16:50
Новичок на форуме
Отправить личное сообщение для andryxx Посмотреть профиль Найти все сообщения от andryxx
 
Регистрация: 15.06.2015
Сообщений: 5

Концептуальная разница 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?
Ответить с цитированием
  #2 (permalink)  
Старый 16.03.2016, 05:14
Аспирант
Отправить личное сообщение для Max Power Посмотреть профиль Найти все сообщения от Max Power
 
Регистрация: 15.12.2015
Сообщений: 83

Вы устанавливаете соединение с базой данных на каждом запросе к вашему серверу. Это очень дорогая операция.

Connection pool - это стандартный патерн. Фишка в том, что при запросе к вашему серверу готовое соединение берется из connection pool, который существует глобально (в том смысле что он уже где-то создан и поддерживается между запросами).

Воспользуйтесь какой-нибудь библиотекой, которая поддерживает connection pool. Например, http://knexjs.org - там заодно и query builder есть - не писать же sql строками в 21 веке...
Ответить с цитированием
  #3 (permalink)  
Старый 17.03.2016, 13:33
Новичок на форуме
Отправить личное сообщение для andryxx Посмотреть профиль Найти все сообщения от andryxx
 
Регистрация: 15.06.2015
Сообщений: 5

Спасибо за ответ!

но меня интересовало прежде всего отличия connection от pool.

connection можно так же создать глобально и обращаться к нему по мере необходимости. однако в этом случае возникает проблема. при наличии готового соединения, по инициативе mySQL происходят отключения этого соединения по тайм-ауту при бездействии определенное время. при этом node.js сервис крашится. Подозреваю, при использовании pool будет происходить то же самое.
создание подключения внутри обработчика обращений к серверу избавляет от этой проблемы. и здесь, похоже не играет роли то, каким способом идет подключение.

библиотеки не люблю. не хочется включать в проект поезд для перевозки пары килограммов груза.

sql строки тоже не использую. у меня все взаимодействие с БД осуществляется через хранимые процедуры.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
NodeJS и MySQL, pool connetctions Sanu0074 Node.JS 1 27.07.2015 01:51