我有一个名为Connection的类,如下所示。这只执行select语句。我有非池连接用于插入或更新。
var _mysql = require('mysql');
function Connection()
{
//private variables and dependencies includes
//create mysql pool connection requires nodejs mysql this connection is used only for selects.
var _connectionSelect = _mysql.createPool({
host : _config.mySQLDB.select.dbHost,
user : _config.mySQLDB.select.dbUser,
password : _config.mySQLDB.select.dbPass,
database : _config.mySQLDB.select.dbName,
supportBigNumbers : true,
connectTimeout : 7000,
connectionLimit : 5,
queueLimit : 5
});
this.executeSelect = function(sql, callback, Message)
{
//connects to mysql.
_connectionSelect.getConnection(function(connectionError, Connection){
if(connectionError)
{
console.log(connectionError);
//throws error if connection or sql gone wrong
Message.add("error", 'serviceDown');
Message.add("devError", 'unknownError');
callback(false);
}
else
{
//executes the query passed
Connection.query(sql, function(error, rows) {
Message.incerementQuery();
if(error)
{
Connection.release();
console.log(error+sql);
//throws error if connection or sql gone wrong
Message.add("error", 'unknownError');
Message.add("devError", "seriousError", "Database errors at resource server side");
callback(false);
}
else
{
Connection.release();
//executes the callback function
callback(rows);
}
});
}
});
};
}
exports.Connection = Connection;
每当我想执行查询时,我就创建了这个类的实例。
我知道MySQL中的默认并发连接是100,我想保留这个数字。
每当我尝试运行我的应用程序时,此连接池将逐步递增每个选择并很快达到100个连接。
正如您所看到的,我正在释放成功或错误状态的连接。我很确定我一定做错了什么,但很难搞清楚。
是因为我如何创建这个类的实例?我希望如果我提供
connectionLimit : 5
即使我创建了这个类的许多实例,它应该只使用5个连接?
注意:我的本地计算机中只有一个此应用程序的实例。
很抱歉非常业余,我是这个流媒体I / O业务的新手。我喜欢汇集的想法,但如果我无法解决这个问题,我可能需要为每个查询使用传统的开放和关闭连接。任何帮助将不胜感激。
非常感谢,
KARTHIK
答案 0 :(得分:3)
得到了来自git hub https://github.com/dougwilson的Doug Wilson的答案。
我应该在函数之外实例化createPool。像魅力一样。
代码就像
var _mysql = require('mysql');
//create mysql pool connection requires nodejs mysql this connection is used only for selects.
var _connectionSelect = _mysql.createPool({
host : _config.mySQLDB.select.dbHost,
user : _config.mySQLDB.select.dbUser,
password : _config.mySQLDB.select.dbPass,
database : _config.mySQLDB.select.dbName,
supportBigNumbers : true,
connectTimeout : 7000,
connectionLimit : 5,
queueLimit : 5
}
function Connection()
{
//private variables and dependencies includes
);
this.executeSelect = function(sql, callback, Message)
{
//connects to mysql.
_connectionSelect.getConnection(function(connectionError, Connection){
if(connectionError)
{
console.log(connectionError);
//throws error if connection or sql gone wrong
Message.add("error", 'serviceDown');
Message.add("devError", 'unknownError');
callback(false);
}
else
{
//executes the query passed
Connection.query(sql, function(error, rows) {
Message.incerementQuery();
if(error)
{
Connection.release();
console.log(error+sql);
//throws error if connection or sql gone wrong
Message.add("error", 'unknownError');
Message.add("devError", "seriousError", "Database errors at resource server side");
callback(false);
}
else
{
Connection.release();
//executes the callback function
callback(rows);
}
});
}
});
};
}
exports.Connection = Connection;
非常感谢。很抱歉这么傻。
KARTHIK