Sui*_*oth 8 mongoose mongodb node.js
在我深入研究我的问题之前,我想指出我正在做这个部分以熟悉node和mongo.我意识到可能有更好的方法来实现我的最终目标,但我想要摆脱的是一种可能适用于其他情况的一般方法.
目标:
我有一个包含600多万个地理IP记录的csv文件.每条记录总共包含4个字段,文件大约为180mb.
我想处理这个文件并将每条记录插入名为"Blocks"的MongoDB集合中.每个"块"将包含csv文件中的4个字段.
我目前的做法
我正在使用mongoose创建一个"Block"模型和一个ReadStream来逐行处理文件.我用来处理文件和提取记录的代码工作,如果我愿意,我可以让它将每条记录打印到控制台.
对于文件中的每个记录,它调用一个函数来创建一个新的Blocks对象(使用mongoose),填充字段并保存它.
这是每次读取和解析行时调用的函数内部的代码."rec"变量包含一个表示文件中单个记录的对象.
block = new Block();
block.ipFrom = rec.startipnum;
block.ipTo = rec.endipnum;
block.location = rec.locid;
connections++;
block.save(function(err){
if(err) throw err;
//console.log('.');
records_inserted++;
if( --connections == 0 ){
mongoose.disconnect();
console.log( records_inserted + ' records inserted' );
}
});
Run Code Online (Sandbox Code Playgroud)
问题
由于文件是异步读取的,因此同时处理多行,并且读取文件比MongoDB可以写入的速度快得多,因此整个过程停留在大约282000条记录,并且高达5k +并发Mongo连接.它不会崩溃..它只是坐在那里什么都不做,似乎没有恢复,mongo集合中的项目计数也没有进一步.
我在这里所说的是解决这个问题的一般方法.我如何限制并发Mongo连接的数量?我想利用能够同时插入多个记录,但我错过了一种规范流量的方法.
先感谢您.
| 归档时间: |
|
| 查看次数: |
2397 次 |
| 最近记录: |