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); }); } |
решение найдено
В итоге удалось найти решение. Похоже проблема исходит из настроек модуля mysql, которые как-то можно поменять, но как я не знаю. Похоже когда db.query получает строку, она отправляет её на сервер только тогда, когда процесс, который вызывает db.query, завершен. А если db.query работает в цикле, то модуль копит строки, и только после завершения самого цикла, отправляет всё на сервер. В итоге пришлось создать глобальный counter. цикл переделать в функцию. вызвать функцию один раз. А далее в самой функции, которая вызывает db.query, увеличить counter, и снова вызвать функцию, которая создана вместо цикла. Может не самое элегантное решение, да времени на выполнение занимает существенно больше, но строки записываются одна за одной и сразу становятся доступными для внешнего query. Победа!
|
Часовой пояс GMT +3, время: 15:29. |