使用Nodejs将大量条目插入Mongodb

时间:2013-04-15 16:15:13

标签: node.js mongodb express mongoose database

所以我有一个包含“pin”的文件,我需要输入mongodb。它们包含在名为pins.txt的文件中,数据是新行分隔的:

A4DS24SD2
DF234SDF2
HFFGHFG45
JDRSDFG35
...

我需要导入大约70,000个引脚。

每个图钉的默认used状态均为false

所以,要导入如此庞大数量的引脚,我已经使用nodejs / mongoose(我内置了我的应用程序)来熟练了。

  fs.readFile './data/pins-test.txt', 'utf8', (err,data)->
    if err
      console.log err
    codes = data.split('\n')
    codes.forEach (code)->
      pin = new Pin()
      pin.pinid = code
      pin.save()

测试几百个引脚效果很好,但是当我尝试70,000文件时,我的机器内存耗尽:

FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory

所以,我的问题是,导入这么多数据的最佳方法是什么?我应该使用async.js一次执行这些吗?

1 个答案:

答案 0 :(得分:1)

fs.readFile的问题是在回调被触发之前加载了整个文件。

您可以使用BufferedReader逐行执行此操作

这样的事情应该有用(注意......未经测试!)

reader = require "buffered-reader"
DataReader = reader.DataReader

...

  new DataReader("./data/pins1.txt", { encoding: "utf8" })
    .on "error", (error)->
        console.log ("error: " + error);
    .on "line", (line)->
        console.log(i,line)
        i++
        pin = new Pin()
        pin.pinid = line
        pin.save()
    .on "end", ()->
        console.log ("EOF")
    .read()