Я новичок в узле и во всей парадигме неблокирующего ввода-вывода. Я импортирую CSV из 1,8 миллиона строк в базу данных. Это работает, если я усекаю CSV до меньшего количества строк, но мне не хватает памяти для большего количества строк. Мой ORM - это sequelize, основанный на асинхронности/обещаниях.
Вот упрощенный фрагмент моего кода:
csv()
.from.path(thePath)
.on('record', function(row,index){
models.meshblock.findOrCreate({
where: {item_code: row[0]},
})
})
Я думаю, проблема в том, что при потоковой передаче CSV я отправляю все эти асинхронные запросы к базе данных быстрее, чем они могут быть обработаны, поэтому память используется быстрее, чем освобождается.
Если бы был просто способ сказать «закончить эту строку, сохранить ее в базе данных, подождать, пока все не будет сделано, освободить память, а затем продолжить», тогда процесс должен быть очень медленным, но, по крайней мере, должен быть в состоянии завершиться без заканчивается память.
Верна ли моя оценка проблемы? И как я могу обойти это и импортировать строки без нехватки памяти?