2017-02-03 1 views
2

Я создал скрипт, который использует SQLite, Mysql и PostgreSQL. Я получаю значения из PostgreSQL, который я использую для вызова MySQL, который я, наконец, храню в SQLite. SQLite затем используется для других приложений. Я собираюсь запустить script.js каждые полчаса в качестве задания cron.NodeJS, сохраняющий данные в SQLite как из MySQL, так и из PostgreSQL

Это мой код: 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 в код, чтобы узнать, что занимает время, кажется, что вся обработка базы данных работает в течение менее секунды, но весь node server.js занимает около 30 секунд.

Нужно ли мне что-то закрывать или как я могу отлаживать то, что занимает время?

+0

Возможно, вы поместили код с помощью console.log, а затем - чтобы узнать, что работает быстро и выдает соответственно? –

+0

Я сделал, и console.log() после mysqlConnection.end() вышел через несколько секунд, а затем остальное приложение заработало около 29 секунд. Запуск --prof на показе скриптов: 40.3% ___mac_get_pid. –

ответ

2

В соответствии с Library de-initialization ноты pg-promise, и, как показано во всех examples ...

В конце обработки, вызовите pgPromise.end(), чтобы закрыть пул соединений, поэтому процесс может завершить без каких-либо задержек.