所以我有一个包含“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一次执行这些吗?
答案 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()