内存高效的方式来导入大文件和数据到MongoDB?

问题描述:

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

例子:

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

在我的headerline和数据是这样的:

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

530万行20列,约900MB,我最终是这样的:

Overhead

从长远来看,这对我无效;我可能不会总是能够重新启动,或最终会耗尽内存。什么是更有效的导入到MongoDB的方式?我已经读过关于周期性RAM冲洗的问题,我如何实现类似上面的例子?

更新: 我不认为我的情况会从调整fsync,syncdelay或日记中获益很多。我只是好奇这是否是一个好主意和最佳实践,即使我在高RAM服务器上运行。

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

  1. 不要太担心你的操作系统是告诉你多少内存是“免费” - 一个现代化的良好运行的操作系统通常会使用每一点RAM都可用于某些事情。

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

+0

我想我的情况不会受益于调整fsync,syncdelay或日记。我只是好奇这是否是一个好主意和最佳实践,即使我在高RAM服务器上运行。 – 2013-04-06 14:41:43