将大文件和数据导入MongoDB的内存有效方法?

时间:2013-04-06 01:47:42

标签: mongodb memory-management mongoimport database nosql

在最近尝试使用MongoDB之后,我尝试了一些将大量数据导入/插入集合的不同方法。到目前为止,我发现的最有效的方法是mongoimport。它工作得很好,但仍有开销。即使导入完成后,除非重新启动计算机,否则内存不可用。

示例:

mongoimport -d flightdata -c trajectory_data --type csv --file trjdata.csv --headerline

我的标题和数据如下所示:

'FID','ACID','FLIGHT_INDEX','ORIG_INDEX','ORIG_TIME','CUR_LAT', ...
'20..','J5','79977,'79977','20110116:15:53:11','1967', ...

有了320万行乘20列,大约900MB,我最终会这样:

Overhead

从长远来看,这对我不起作用;我可能无法始终重启,或最终会耗尽内存。什么是更有效的导入MongoDB的方法?我已经读过有关定期RAM刷新的内容,我怎样才能实现类似于上面示例的内容?

更新 我不认为我的案例会因调整fsync,同步延迟或日记而受益匪浅。我只是想知道什么时候这是一个好主意和最佳实践,即使我在高RAM服务器上运行。

1 个答案:

答案 0 :(得分:2)

我猜mongodb本身正在使用内存,而不是mongoimport。 Mongodb设计试图将所有数据保存到内存中,并依赖操作系统在没有足够空间时交换内存映射文件。所以我会给你两条建议:

  1. 不要过分担心你的操作系统告诉你内存是多少“免费” - 现代运行良好的操作系统通常会使用可用于RAM的每一部分内容。

  2. 如果您不能遵守#1,请不要在笔记本电脑上运行mongodb。