2012-11-26 46 views
7

私のNode.jsのコードは なぜNode.jsのMySQLが遅いのですか?

以下CODE1のようなものです:

var http=require('http'); 
var MySQL = require('mysql'); 

mysql = MySQL.createConnection(...) 

http.createServer(function(req, res){ 
    // the query will take several seconds 
    mysql.query("SELECT SLEEP(1)", function....) 
}); 
http.listen(...); 

下回っ問題は、私はあまりにも速くページを更新すると、サーバがクラッシュになりますです。私はノードmysqlモジュールの問題だと思う、それはキュー内のクエリを処理します。私は接続プールを作成しようとします。

CODE2:

.... 
var pool = require('generic-pool'); 
var mp = pool.Pool({ 
    ... 
    create: function(cb){ 
     client = MySQL.createConnection(...); 
     cb(null, client) 
    }, 
    max: 10, // up to 10 connection 
    min: 2, 
    ... 
}); 
.... 
    mp.acquire(function(err, mysql){ 

     // the query will take several seconds 
     mysql.query("SELECT SLEEP(1)", function....) 
     mp.release(mysql); 
    }); 
.... 

しかし、まだここでの問題以下、なぜ?どうしたらいいですか?

EDIT:100回の同時実行性で100回のリクエストを開始しました.10秒が必要です。しかし、それは20秒かかる。どうして?プールは最大5つの接続のみをサポートしていますか?

+0

質問は何ですか?それは適切なインデックスによって裏付けられていますか? –

+0

これを助けるためには、疑似コード以外のものを投稿する必要があります。 – JohnnyHK

+0

クエリは、ノード経由ではなくコマンドラインで実行するとどれくらいかかりますか? –

答えて

1

接続プールは、複数の同時要求を処理するのに適したソリューションです。 'Generic resource pool'を使用する代わりに、なぜmysql固有のプールを使用できないのですか? Node.jsの

+0

'node-mysql'の' createPool({}) '関数を使って接続のプールを作成するほうが良いかもしれません –

1

免責用のMySQL接続プールで、「ノード-mysqlのプール」について

このlink会談:私はこの種の問題を解決するためのモジュールを書きました。

npm install mysql-simple-pool 

これで、接続プールを構成できます。私は最大100の接続を使用します。

var Pool = require('mysql-simple-pool'); 
var pool = new Pool(100, { 
    host: 'localhost', 
    user: 'root', 
    password: 'root', 
    database: 'test' 
}); 

これでテストに使用できるテスト関数を作成できます。

function test() { 
    var counter = 0; 
    var start = new Date().getTime(); 
    for (var xa = 0; xa < 10; xa++) { 
     pool.query('SELECT SLEEP(1)', function(err, results) { 
      counter++; 
      if (counter == 10) { 
       var end = new Date().getTime(); 
       console.log('Time spend is ' + (end - start) + 'ms'); 
       test(); 
      } 
     }); 
    } 
} 
test(); 

そして、これが出力されます...

Time spend is 1044ms 
Time spend is 1006ms 
Time spend is 1005ms 
Time spend is 1006ms 
Time spend is 1007ms 
Time spend is 1005ms 
Time spend is 1005ms 
Time spend is 1004ms 
Time spend is 1005ms 
Time spend is 1005ms 

その最初の頃は、接続を確立するいくつかの時間を費やしています。これが役に立ったら〜

関連する問題