Node -mysql объединение пулов
Я использую модуль node -mysql (https://github.com/felixge/node-mysql) ИЛИ (http://utahjs.com/2010/09/22/nodejs-and-mysql-introduction/).
Является ли этот API также управляющим пулом соединений?
Я имею в виду каждый запрос пользователя, который я вызываю Client.connect()
, чтобы запросить MySQL и выпустить соединение: Client.end()
.
Правильно ли это, или я должен подключиться/отключиться только один раз в коде.
Я изучаю из этого документа: https://github.com/felixge/node-mysql/blob/master/Readme.md
Ответы
Ответ 1
Обновление: февраль 2013 г. - добавлена поддержка пула в node -mysql, см. docs
Пример использования встроенного пула:
var pool = require('mysql').createPool(opts);
pool.getConnection(function(err, conn) {
conn.query('select 1+1', function(err, res) {
conn.release();
});
});
Решения до 2013 года:
Вы можете использовать node-pool или mysql-pool или используйте свой собственный простой круговой пул
function Pool(num_conns)
{
this.pool = [];
for(var i=0; i < num_conns; ++i)
this.pool.push(createConnection()); // your new Client + auth
this.last = 0;
}
Pool.prototype.get = function()
{
var cli = this.pool[this.last];
this.last++;
if (this.last == this.pool.length) // cyclic increment
this.last = 0;
return cli;
}
теперь вы можете надеяться, что все запросы обратного вызова будут выполнены за 1 секунду:
var p = new Pool(16);
for (var i=0; i < 10; ++i)
{
p.get().query('select sleep(1)', function() { console.log('ready'); } ); // server blocks for 1 second
}
Ответ 2
Теперь модуль node -mysql поддерживает пул соединений.
Ссылка: https://github.com/felixge/node-mysql#pooling-connections
Ответ 3
Я считаю, что тот же пакет node -mysql обеспечивает объединение пулов. Посмотрите
var express = require("express");
var mysql = require('mysql');
var app = express();
var pool = mysql.createPool({
connectionLimit : 100, //important
host : 'localhost',
user : 'root',
password : '',
database : 'address_book',
debug : false
});
function handle_database(req,res) {
pool.getConnection(function(err,connection){
if (err) {
connection.release();
res.json({"code" : 100, "status" : "Error in connection database"});
return;
}
console.log('connected as id ' + connection.threadId);
connection.query("select * from user",function(err,rows){
connection.release();
if(!err) {
res.json(rows);
}
});
connection.on('error', function(err) {
res.json({"code" : 100, "status" : "Error in connection database"});
return;
});
});
}
app.get("/",function(req,res){-
handle_database(req,res);
});
app.listen(3000);
Прочтите полное исследование случая (с пулом и без него): http://codeforgeek.com/2015/01/nodejs-mysql-tutorial/