NodeJS,从MySQL和PostgreSQL

时间:2017-02-03 08:35:12

标签: mysql node.js postgresql sqlite

我创建了一个同时使用SQLite,Mysql和PostgreSQL的脚本。 我从PostgreSQL中获取值,我用它来调用MySQL,我最终将它存储在SQLite中。 然后SQLite用于其他应用程序。我正在考虑每半小时运行一次node.js脚本作为一个cron作业。

这是我的代码:https://jsfiddle.net/bjo93syg/

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

var pgConnection = pgPromise('postgres://my-user@localhost/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秒。

我是否需要关闭某些内容,或者如何调试占用时间的内容?

1 个答案:

答案 0 :(得分:2)

根据Library de-initializationpg-promise注释,以及所有examples ...

在处理结束时,调用pgPromise.end()来关闭连接池,这样就可以毫不拖延地完成该过程。