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