2017-02-03 5 views
2

SQLite、Mysql、PostgreSQLの両方を使用するスクリプトを作成しました。 私は最終的にSQLiteに格納するMySQLを呼び出すために使用するPostgreSQLから値を取得しています。 SQLiteは、他のアプリケーションに使用されます。私は30分ごとにcronジョブとしてnode.jsスクリプトを実行することを考えています。NodeJS、MySQLとPostgreSQLの両方からSQLiteにデータを格納

は、これは私のコードです:https://jsfiddle.net/bjo93syg/

var pgPromise = require('pg-promise')(); 
var mysql  = require('mysql'); 
var sqlite3 = require('sqlite3').verbose(); 

var pgConnection = pgPromise('postgres://[email protected]/my-db'); 

var mysqlConnection = mysql.createConnection({ 
    host  : 'localhost', 
    user  : 'my-user', 
    password : 'my-pass', 
    database : 'my-database' 
}); 

var sqliteConnection = new sqlite3.Database('test.db'); 

sqliteConnection.serialize(function() { 
    sqliteConnection.run("BEGIN TRANSACTION"); 
    sqliteConnection.run("DROP TABLE IF EXISTS numbers"); 
    sqliteConnection.run("CREATE TABLE numbers (xnumber BIGINT)"); 
    var stmt = sqliteConnection.prepare("INSERT INTO numbers VALUES (?)"); 

    pgConnection.any('SELECT ...') 
     .then(function(data) { 
      for (var i = 0; i < data.length; i++) { 
       mysqlConnection.query('SELECT ...?', [my_value], function (error, results, fields) { 
        if (error) console.log(error); 
        for (var j = 0; j < results.length; j++) { 
         stmt.run(results[j].x); 
        } 
        stmt.finalize(); 
        sqliteConnection.run("COMMIT"); 

        sqliteConnection.close(); 
        mysqlConnection.end(); 
        // pgConnection is a lazy connection, i.e. only the actual query methods acquire and release the connection 
       }); 
      } 
     }) 
     .catch(function(err) { 
      console.log(err); 
     }); 
}); 

コードが実際に動作しているようですが、実行するのに約30秒を取っています。 console.logsをコードに追加して時間がかかることを確認すると、実際にすべてのデータベース処理が1秒未満で実行されているように見えますが、node server.jsには約30秒かかります。

何かを終了する必要がありますか、または時間のかかるものをどのようにデバッグできますか?

+0

多分あなたはconsole.logでコードを書いてください。何が速く実行され、それに応じて出力されているか見ることができますか? –

+0

私はそうして、mysqlConnection.end()の後のconsole.log()は数秒以内に出てきて、残りのアプリケーションは約29秒間実行されました。 スクリプト上で--profを実行すると、次のように表示されます。40.3%___mac_get_pid。 –

答えて

2
pg-promiseLibrary de-initialization音符あたりとして

、処理の終わりにおいて

、起動pgPromise.end() ...全てexamplesに示すように、接続プールをシャットダウンするので、処理が遅延なく終了することができます。

関連する問題