2014-03-27 49 views
0

我有一個類如下所示的連接類。這隻執行選擇語句。我有非池連接插入或更新。池共享增加連接,並在ER_CON_COUNT_ERROR結束

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

回答

3

得到了道格·威爾遜混帳樞紐https://github.com/dougwilson答案。

我應該在函數的外部實例化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