2012-09-09 15 views
0

我使用線程經常和我不知道這是一個很好的做法:Rails 3.2.8 - 當我將多個數據保存到數據庫時,我應該使用Thread嗎?

def self.create_all_posts 
     threads = [] 
     self.fetch_all_posts.each do |e| 
     if e.present? 
      threads << Thread.new { 
      self.create(title: e[:title], url: e[:url]) 
      } 
     end 
     end 
     main  = Thread.main  # The main thread 
     current = Thread.current # The current thread 
     all  = Thread.list  # All threads still running 

     all.each { |t| t.join } 
    end 

回答

0

基本上是這樣。你可能需要調用config.threadsafe!在application.rb中並​​且mayve allow_concurrency:在database.yml中爲true。根據您的rails版本,您可能至少需要第一個,否則您的db請求可能不會並行運行。

在你的情況下,並行運行多個「INSERT INTO ...」可能沒有很大的性能影響,認爲它很大程度上取決於你的磁盤,內存和db主機上的CPU情況。順便說一句,如果你的fetch_all_posts需要相當長的時間來獲取,你可以使用find_each方法,這可能會啓動創建線程並行調整巨大的數據集。你可以設置find_each的'頁面'大小,使其運行時,例如,每10個職位。

相關問題