2012-11-26 31 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(...); 

的問題是服務器將崩潰,當我刷新頁面太快。我認爲是node-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); 
    }); 
.... 

但問題還在這裏,爲什麼呢?我怎樣才能解決這個問題。編輯:我發射100個100個併發請求,預計10秒。但它需要20秒。爲什麼?池是否只支持最多5個連接?

+0

什麼是查詢?它是否由適當的索引支持? –

+0

你將需要發佈比僞代碼更多的幫助。 – JohnnyHK

+0

查詢在命令行而不是通過節點運行時需要多長時間? –

回答

1

連接池是處理多個併發請求的很好的解決方案。 但是爲了不使用'通用資源池',爲什麼我們不能使用特定於mysql的池?

一下,「節點的mysql-池」,這是對的node.js

+0

使用'node-mysql'的'createPool({})'函數創建一個連接池可能會更好 –

1

免責聲明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 

第一次圍繞它花費一段時間建立連接。希望這有助於〜

相關問題