タグ

ブックマーク / taslam.hatenadiary.org (1)

  • 並列処理でActiveRecordを使う(ActiveRecord::Base.allow_concurrencyをtrueにする)

    ※ドキュメントを読みながらこんなもんかな?とやってみたやつなので問題あるかもしれません。何かあればコメント頂けると嬉しいです。 例えば、DBからデータを取り出して逐次メールを送信する場合。 よく知られているようにメールの送信はコネクションの確立やSMTPサーバの処理などの待ち時間が長く、逐次処理をしていると無駄が大きすぎる。 処理を並列化して、あるメールの送信待ち時間を他のメールの構築等に充てて無駄をなくすことを試みる。 環境 Ruby 1.8.6 Rails 2.1.0 PostgreSQL 8.3 処理の並列化 Thread.newを使う。単純に実装すればこんなかんじ。 # 未送信のレコードをそれぞれ別々のスレッドで処理するサンプル threads = [] mails = find(:all, :conditions => ["sent = ?", false]) mails.eac

    並列処理でActiveRecordを使う(ActiveRecord::Base.allow_concurrencyをtrueにする)
  • 1