质量插入mongoid

时间:2011-02-24 01:40:13

标签: mongodb mongoid

我目前在Heroku上有这个Web应用程序,它使用用户复制并粘贴到Web表单中的大部分逗号分隔值(或其他分隔符分隔值)的纯文本,然后应用程序将从每行获取数据并将其保存到mongo db。

例如

45nm, 180, 3
44nm, 180, 3.5
45nm, 90, 7
...

@project = Project.first # project embeds_many :simulations
@array_of_array_of_data_from_csv.each do |line|
  @project.simulations.create(:thick => line[0], :ang => line[1], :pro => line[2])
  #e.g. line[0] => 45nm, line[1] => 180, line[2] => 3
end

对于这个应用程序的目的,我不能让用户进行任何类型的导入,我们必须从textarea获取它们的数据。每次,用户最多可以粘贴30,000行。我尝试在Heroku上使用控制台中的一些虚假数据执行此操作(30,000个数据点),它终止说控制台不支持长进程,而是尝试rake任务。

所以我想知道是否有人知道插入30,000个文档需要这么长时间(当然,它可能就是这样),或者知道另一种方法来快速插入30,000个文档?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

如果您要插入那么多文档,那么您应该批量添加...我会定期插入200,000个文档批次,然后快速创建它们!

因此,每次只需让循环附加一个文档数组,然后将其作为一个大批量插入到MongoDB中,而不是创建一个“创建”/插入新文档的循环。

可以找到如何使用mongoid执行此操作的示例in this question

但是你应该记住,这可能最终会占用大量内存(因为在构建它时,整个哈希/文档数组会在内存中。)

小心点:):