将大型csv行导入数据库而不会耗尽内存

时间:2016-08-11 23:12:03

标签: node.js sequelize.js

我是节点和整个非阻塞IO范例的新手。我正在将180万行的CSV导入数据库。如果我将CSV截断为较小的行数,但是我的内存不足以用于更多的行,则它可以工作。我的ORM是sequelize,它基于异步/承诺。

以下是我的代码的简化代码段:

csv()
.from.path(thePath)
.on('record', function(row,index){
  models.meshblock.findOrCreate({
      where: {item_code: row[0]},
  })
})

我认为问题在于,当我将CSV流式传输时,我发送所有这些异步数据库查询的速度比处理它们的速度快,因此内存的使用速度比释放速度快。

如果只有一种方法可以说“完成这一行,将其保存到数据库中,等待它全部完成,释放内存,然后继续”然后该过程应该超级慢,但至少应该能够完成而不会耗尽内存。

我对问题的评估是否正确?而且,我如何绕过它并导入行而不会耗尽内存?

1 个答案:

答案 0 :(得分:0)

可能最高效的方式是使用特定于数据库的机制。例子: