2012-11-26 4 views
7

내 Node.js를 코드 왜 Node.js의 MySQL이 느린가요?

아래 코드 1과 같다 :

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 초의 예상 요청을 실행합니다. 하지만 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 

주위 처음 연결을 설정하는 시간을 보낸다. 희망이 도움이 ~

관련 문제