Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.09.2019, 21:55
Новичок на форуме
Отправить личное сообщение для vmetnev@mail.ru Посмотреть профиль Найти все сообщения от vmetnev@mail.ru
 
Регистрация: 27.05.2016
Сообщений: 4

nodeJS и mysql
Помогите разобраться с записью данных из nodejs в mysql

Есть код, который должен записать 1 млн. строк в mysql. Расчеты занимают много времени, поэтому после каждой итерации расчетов предполагалось, что код будет записывать одну строку в mysql и переходить к другим расчетам. Также предполагалось, что после записи каждой строки в mysql, эти данные становятся доступными для запросов в mysql из других программ.

Но в рамках решения получается другая ситуация. Сначала производятся все расчеты на всех итерациях (1 млн. итераций), и только потом данные записываются в mysql.

Другими словами строки записываются в mysql не одна за одной, а всем балком по итогам всех итераций.

Как это изменить, чтобы после каждой итерации строка, отправленная в mysql записывалась в базу данных и становилась доступна для внешних запросов из базы данных пока производятся другие расчеты.

const mysql = require("mysql");

// Create connection
const db = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "somePassword",
  database: "tickers"
});

// Connect
db.connect(err => {
  if (err) {
    throw err;
  }
  console.log("MySQL connected");


  for (var uniqueSets = 0; uniqueSets < 1000000; uniqueSets++) {

    // some programming logic here

    // then calling the procedure to commit data to mysql>>>
    sendToMYSQL(
      t1,
      t2,
      t3
    );
  }


function sendToMYSQL(t1, t2, t3) {
  let post = {
    t1: t1,
    t2: t2,
    t3: t3
  };
  let sql = "INSERT INTO scope SET?";
  let query = db.query(sql, post, (err, result) => {
    if (err) throw err;
    console.log(result);
  });
}
Ответить с цитированием
  #2 (permalink)  
Старый 06.09.2019, 23:37
Новичок на форуме
Отправить личное сообщение для vmetnev@mail.ru Посмотреть профиль Найти все сообщения от vmetnev@mail.ru
 
Регистрация: 27.05.2016
Сообщений: 4

решение найдено
В итоге удалось найти решение. Похоже проблема исходит из настроек модуля mysql, которые как-то можно поменять, но как я не знаю. Похоже когда db.query получает строку, она отправляет её на сервер только тогда, когда процесс, который вызывает db.query, завершен. А если db.query работает в цикле, то модуль копит строки, и только после завершения самого цикла, отправляет всё на сервер. В итоге пришлось создать глобальный counter. цикл переделать в функцию. вызвать функцию один раз. А далее в самой функции, которая вызывает db.query, увеличить counter, и снова вызвать функцию, которая создана вместо цикла. Может не самое элегантное решение, да времени на выполнение занимает существенно больше, но строки записываются одна за одной и сразу становятся доступными для внешнего query. Победа!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(NodeJS): Сохранение значений в MySQL monikon Серверные языки и технологии 0 08.08.2018 09:18
MySQL и NodeJS АнонимныйПарень Node.JS 1 15.09.2017 12:39
Node.js + mysql mazahist Node.JS 4 17.11.2016 19:07
NodeJS и MySQL, pool connetctions Sanu0074 Node.JS 1 27.07.2015 01:51
Nodejs и mysql Chrome AJAX и COMET 6 03.08.2014 17:23