2011-02-24 75 views
2

我目前在Heroku此Web应用程序,花费主要是逗号分隔值的纯文本(或其他分隔符分隔值),用户副本,和粘贴在网页表单和应用程序将随后获得的数据从每一行,并保存到一个mongo分贝。质量插入mongoid

例如

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行。我想这样做(30,000个数据点)在Heroku上有一些假的数据在一个控制台,决定终止说一个漫长的过程不是在控制台支持,尽量耙任务来代替。

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

感谢您的帮助

回答

1

如果你插入你应该做它作为一个批处理文件很多......我经常插入200000个文档批次,它们在瞬间获得创建!

所以,与其做一个循环,“创建” /插入一个新的文档,每次只需要你的循环附加的文件数组,然后插入到MongoDB的作为一个大批次。

如何用mongoid做到这一点的一个例子可以找到in this question

但是你应该记住,这可能最终会被相当内存密集型(如哈希全阵列/文件,将在内存中为您打造它。)

只是要小心:)

+0

嘿感谢那个链接,我只是试了一下,插入集合时它非常快。但是这里有一个问题:因为我没有将大量文档插入到一个集合中,而是将很多嵌入式文档插入到一个根文档中。你知道有那么快的类似漂亮的mongo驱动程序命令吗? – 2011-02-24 03:36:34

+0

@尼克,有什么区别?这样做的插入/更新的服务器上的各个操作应该是缓慢的一部分......如果你在×1次插入一批30,000或只是一个大文件*应采取大致相同的时间? – 2011-02-24 18:29:02