Я использую sqlite3 обертку для узла для копирования данных из одного БД в другой при выполнении отдельных вставок в каждой транзакции
При попытке вставить 100 тыс. Записей временный файл myDB-журнала создается и обновляется по мере выполнения запроса
Файл журнала постоянно обновляется после завершения выполнения кода в узле
Electron перестает отвечать на запросы -> использование памяти возрастает до ~ 1,59 ГБ и ~ 120% ЦП на процессоре Intel Sierra 1,6 ГГц Intel Core i5 (8 ГБ оперативной памяти)
Есть идеи, как я могу оптимизировать этот процесс, чтобы избежать сбоя моего электронного приложения?
var sqlite3 = require('sqlite3').verbose();
var path = require('path');
var Promise = require('bluebird');
var _ = require('underscore')
module.exports.myModule = function(input){
//the copy-from database
var dbTarget = new sqlite3.Database(path.join(__dirname, '/db/myDB.db'));
// the copy-to database
var dbSource = new sqlite3.Database(input.path);
// selection query that determines what to copy from the source db
var selectionQuery = "SELECT colA, colB FROM sourceTable WHERE colB > 0"
dbTarget.serialize(function() {
// fetches all source rows
dbSource.all(selectionQuery, function(err, rows) {
// for each row fetched from the sourceDB
_.each(rows,function (row) {
// insert into targetDB if unique else ignore and move onto the next line
var str = "INSERT OR IGNORE INTO `mytable` (COL_A,COL_B) VALUES(?,?)";
//per the https://github.com/mapbox/node-sqlite3 documentation ( prepare statement then execute)
var stmt = dbTarget.prepare(str);
stmt.run(input.valA,input.valB,function(err) {
if(err) {throw err; }
});
stmt.finalize();
})
})
});
};