2012-09-09 2 views
0

나는 꽤 자주 스레드를 사용하고 있는데이 것이 좋습니다 궁금 : 네, 기본적으로레일 3.2.8 - 데이터베이스에 여러 데이터를 저장하면 스레드를 사용해야합니까?

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 파일에서 allow_concurrency : database.yml에서 true 일 수 있습니다. 귀하의 레일 버전에 따라 최소한 첫 번째가 필요할 수도 있습니다. 그렇지 않으면 DB 요청이 병렬로 실행되지 않습니다.

"INSERT INTO ..."를 병렬로 실행하면 큰 성능 효과가 없을 수도 있습니다. db 호스트의 디스크, 메모리 및 CPU 상황에 크게 의존한다고 생각하십시오. BTW, fetch_all_posts 가져올 상당한 시간이 걸리는 경우, find_each 접근 방식을 사용할 수 있습니다, 가능한 scnning 거대한 데이터 집합의 병렬 생성 스레드를 시작할 것입니다. find_each에 대해 'page'크기를 설정하여 10 개의 게시물마다 실행되도록 설정할 수 있습니다.

관련 문제