2011-02-24 64 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