私は、Resque、Resque-Status、Resque-Retryを使ってbkgジョブを処理しています。 以下はジョブの例です。 4-5モデルに対してクエリを実行します。 今、私はResqueよりも速いことを誇るSidekiqを試してみたいと思います。Resque performメソッドまたはResque Jobクラスのベンチマーク方法は?
しかしその前に、自分の次の仕事を自分のレールアプリでベンチマークして、後で自分の仕事がベストになることを検証したいと思います。
class BkgJob < Resque::JobWithStatus
extend Resque::Plugins::Retry
@retry_limit = 3
@retry_delay = 60
@queue = :critical
def perform
worker_id, station_id, ids = options['worker_id'], options['station_id'], options['ids']
human_worker = Worker.find(human_worker_id)
station = Station.find(station_id)
.....
.....
end
end
このように、上記のジョブクラスをベンチマークする方法や実行方法は問題ですか?私はベンチマークでは本当に初心者です。
返答のためのThanx。しかし、私はまだ仕事の中で起こるDBコールについて心配しています。例えばオプションのハッシュを渡しても、performが呼び出されると、これらのdbコールは 'Station.find(station_id)'と呼ばれます。いくつかのシナリオが十分にクリアされているか、紛失していませ – Autodidact
申し訳ありませんが私は十分に明確ではなかった。 Sidekiqに切り替えると、これらのDBコールはジョブ内では必要ありません。基本的に、ジョブがキューに入れられると、Sidekiqは 'YAML.dump()'で引数をシリアル化し、ジョブが開始すると引数を 'YAML.load()'で逆シリアル化します。 Rubyでは、ActiveRecordオブジェクトを含むすべての属性を持つオブジェクトをYAMLにダンプすることができます。そして、オブジェクトがダンプからロードされると、それはDBへのそれ以上の問い合わせなしに使用する準備が整っています。 – kulesa
あなたのアプリケーションで 'station_dump = YAML.dump(Station.first)'を実行しようとすると 'station = YAML.load(station)'は文字列にダンプしたStationオブジェクトを返します。もちろん、いくつかの注意点があります。たとえば、コールの間にステーションが削除された場合、復元されたステーションオブジェクトにはすべての属性が含まれますが、保存しようとするとエラーが発生します。しかし、これを念頭に置いて、YAMLに対するジョブ引数のシリアライズは、データベースのヒット率を節約し、パフォーマンスを向上させます。 – kulesa