2013-04-15 26 views
0

所以我有一個包含需要輸入到mongodb中的「引腳」的文件。它們包含在一個名爲pins.txt文件和數據是新行分隔:用Nodejs在Mongodb中插入大量條目

A4DS24SD2 
DF234SDF2 
HFFGHFG45 
JDRSDFG35 
... 

還有約70000針,我需要進口。

每個管腳也有false

默認used狀態,因此,進口針這樣一個龐大的數字,我已經熟了這個使用的NodeJS /貓鼬(其中我的應用程序內置)

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

fs.readFile的問題是整個文件在回調被觸發前加載。

你可以使用BufferedReader通過線做這行

像這樣的東西應該工作(注意:是未經測試!)

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

...

+0

哇,圈我的文件是70萬行,不是70,000行。不用說,這個模塊工作得很好。只需幾分鐘即可進口。我已經更新了我的代碼示例。 – wesbos

+0

我打算說70k線沒有足夠長的聲音來填充你的RAM! 很高興幫助。 – Alex