内存高效的方式来导入大文件和数据到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,我最终是这样的:
从长远来看,这对我无效;我可能不会总是能够重新启动,或最终会耗尽内存。什么是更有效的导入到MongoDB的方式?我已经读过关于周期性RAM冲洗的问题,我如何实现类似上面的例子?
更新: 我不认为我的情况会从调整fsync,syncdelay或日记中获益很多。我只是好奇这是否是一个好主意和最佳实践,即使我在高RAM服务器上运行。
答
我猜测内存被mongodb本身使用,而不是mongoimport。按设计Mongodb试图将其所有数据保存到内存中,并在没有足够空间时依靠操作系统交换内存映射文件。所以,我愿意给你两点建议:
不要太担心你的操作系统是告诉你多少内存是“免费” - 一个现代化的良好运行的操作系统通常会使用每一点RAM都可用于某些事情。
如果您无法遵守#1,请不要在笔记本电脑上运行mongodb。
我想我的情况不会受益于调整fsync,syncdelay或日记。我只是好奇这是否是一个好主意和最佳实践,即使我在高RAM服务器上运行。 – 2013-04-06 14:41:43