2017-01-05 30 views
0

NodeJSとMySQLのDBに対する非同期クエリに関する質問があります。私はNodeJS mysql非同期クエリ

var mysql = require("mysql"); 
var con = mysql.createConnection({ 
    .... 
}); 

con.connect();  

con.query("select MILLIONS records from table1",function(err,rows){ 
    console.log('Data received 1'); 
}); 

con.query("select HUNDRED records from table2",function(err,rows){ 
    console.log('Data received 2'); 
}); 

最初のクエリが実行されるより多くの時間がかかり、次のコードを考えてみましょう、第二は、はるかに高速であり、私は2番目のコールバックが最初に実行されますが、その:)ではないであろうことを期待しています。 2番目の接続を作成しようとしましたが、期待どおりに機能しました - 呼び出しは非同期で動作しました。 2つの別々の非同期クエリ間で接続が共有されていないように見えるため、結果的に実行されます。または私は何か間違っている?多分、誰かが非同期呼び出しを行う方法に関する情報を各呼び出しの接続を確立せずに提供する可能性があります。

+0

あなたは 'async'パッケージを使用できます。 [Read here](https://github.com/caolan/async/blob/v1.5.2/README.md) –

+0

あなたは 'Sequelize'を使用してMySQL DBを管理することができます – IARKI

+0

質問に回答を編集しないでください。実際に自分で答えを追加するか、あるいは十分に良い場合には、djonesが提供した答えを受け入れるかのどちらかです。 – Gimby

答えて

0

接続は、サーバーにコマンドを送信し、アプリケーションとサーバー間でデータを受信するストリームを表します。そのストリームが何百万ものレコードを送信しているときには、別のクエリを処理することもできません。

複数のクエリを並行して実行する場合は、複数の接続が必要です。これにはconnection poolを使用することを検討する必要があります。

var pool = mysql.createPool({ ... }); 

pool.query("select MILLIONS records from table1",function(err,rows){ 
    console.log('Data received 1'); 
}); 

pool.query("select HUNDRED records from table2",function(err,rows){ 
    console.log('Data received 2'); 
});