スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tag:スポンサー広告 

【Rails】ActiveRecordのfind_in_batchesで一定の数ずつ処理をする

はじめに


今回はデータベースからある決まった数ずつデータを取得したい場合を考えます。
上記のようなデータの取得の仕方をしたい場合、ベタなSQLを書いていくイメージだとlimitとoffsetを駆使してループ処理を実装してページングのような処理を実装しないといけないと思います。

Railsならfind_in_batchesという便利なメソッドで簡潔に実現できる方法が用意されているのでその紹介です

実例


例えば10000件の記事を管理しているテーブルarticles(モデルはArticleとします)から記事を50件ずつ処理したい場合以下の様にします。今回はわかりやすいようにさらに具体的にその記事それぞれのはてなブックマーク数を算出する処理を例にとります。



この実例は実は実際のプロダクトであった例で、このような実装をする前は1件ずつhttpリクエストをしていました。なのでだいぶリソースを食っていました。
そもそもはてなのAPIへのリクエストパラメータでurlを50件送ることができることを知らなかったこともあるのですが、知ったところでfind_in_batchesを知らなかったので上記の実例とは全く別の方法で実装していたかもしれません。

おわりに


上記のような例は外部のAPIを利用するようなシーンでは割りとあると思います。
確かAmazonのAPIなどもカンマ区切りでパラーメータの値を複数渡せるようなものがあった気がします。

もちろん他にも利用できるシーンは多々あると思いますし、この方法がかえってボトルネックになってしまうこともあるのでその都度最適な方法を採用しましょう。
スポンサーサイト
テーマ : プログラミング
ジャンル : コンピュータ

Tag:Rails  Trackback:0 comment:0 

Comment

comment form
(編集・削除用):
管理者にだけ表示を許可
プロフィール

6rats

Author:6rats
こんにちは、ITベンチャーで働くエンジニアです
主に自分の周りで起きた技術的なことをメモとして書き残して行きます。
Android以外にもRuby/Ruby on RailsやFuelPHPなどなどたまにやります。基本的なスタンスとしては興味があるもしくは必要になったらいろんなことにチャレンジします。
最近はiOSアプリ開発を始めています。

購読
follow us in feedly
個人プロダクト

Androidアプリ

Twitterクライアント

Webアプリケーション

EcPriceWatch(Amazon価格の推移を計測、最安値を知らせるサービス)
Google AdSense
ブログ村
にほんブログ村 IT技術ブログへ
にほんブログ村
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。