4

在最近尝试了 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', ...

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

高架

从长远来看,这对我不起作用;我可能并不总是能够重新启动,或者最终会耗尽内存。导入 MongoDB 的更有效方法是什么?我已经阅读了有关定期 RAM 刷新的信息,我该如何实现与上面的示例类似的内容?

更新: 我认为我的案例不会从调整 fsync、syncdelay 或日志中受益匪浅。我只是好奇什么时候这是一个好主意和最佳实践,即使我在高 RAM 服务器上运行。

4

1 回答 1

2

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

  1. 不要太担心你的操作系统告诉你有多少内存是“空闲的”——一个运行良好的现代操作系统通常会使用所有可用的 RAM。

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

于 2013-04-06T05:06:02.227 回答