Ищем методы оптимизации node-sqlite3 - PullRequest
0 голосов
/ 27 июня 2018

Я использую 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();
       })
    })
  });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...