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秒かかります。
何かを終了する必要がありますか、または時間のかかるものをどのようにデバッグできますか?
多分あなたはconsole.logでコードを書いてください。何が速く実行され、それに応じて出力されているか見ることができますか? –
私はそうして、mysqlConnection.end()の後のconsole.log()は数秒以内に出てきて、残りのアプリケーションは約29秒間実行されました。 スクリプト上で--profを実行すると、次のように表示されます。40.3%___mac_get_pid。 –