我是节点和整个非阻塞IO范例的新手。我正在将180万行的CSV导入数据库。如果我将CSV截断为较小的行数,但是我的内存不足以用于更多的行,则它可以工作。我的ORM是sequelize,它基于异步/承诺。
以下是我的代码的简化代码段:
csv()
.from.path(thePath)
.on('record', function(row,index){
models.meshblock.findOrCreate({
where: {item_code: row[0]},
})
})
我认为问题在于,当我将CSV流式传输时,我发送所有这些异步数据库查询的速度比处理它们的速度快,因此内存的使用速度比释放速度快。
如果只有一种方法可以说“完成这一行,将其保存到数据库中,等待它全部完成,释放内存,然后继续”然后该过程应该超级慢,但至少应该能够完成而不会耗尽内存。
我对问题的评估是否正确?而且,我如何绕过它并导入行而不会耗尽内存?
答案 0 :(得分:0)
可能最高效的方式是使用特定于数据库的机制。例子:
LOAD DATA INFILE
COPY
bcp
sqlldr