人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

登録されたデータが指定時刻になるとAという処理(例えばオークションが終了するとメール配信)を動かしたいと思います。この場合の実装方法として一般的なのは、次のうちどれでしょうか?LAMP環境を前提としてください。

(a) cronに1分毎に終了時刻をチェックして、該当データがあればAを起動する処理を登録。
(b) デーモンに常駐してDBを監視するようなプログラム
(c) その他


●質問者: logihot
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:なのは オークション データ デーモン プログラム
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● pahoo
●20ポイント

「指定時刻になるとAという処理」を行うのであれば、指定時刻を入れて cron を一度だけ起動すればいいと思います。


もし、DBにあるデータを一定間隔で監視したいなら、デーモンを作った方がサーバの負荷は減ります。

◎質問者からの返答

例えば、オークションですと、一日数千件の終了データがあると思います。その場合、毎度1件1件cronに追加する訳にはいかないので、特定プログラムを毎時セットするのが現実的ですね。


2 ● b-wind
●20ポイント

要件によるでしょう。

ただ、「指定時間ぴったしに」ということであれば (a) が多いかもしれませんね。

(b) 形式だと前の処理が終わってなかったりすると「指定時間以降に」という設定になってしまいますし。

◎質問者からの返答

(B)は開発も面倒ですね。


3 ● standard_one
●20ポイント

他所様のデータを参照するならa

自前ならc(終了処理にメール送信機能をフックしておく)

◎質問者からの返答

終了処理をどう起動するか、を知りたいです!


4 ● pahoo
●20ポイント

例えば、オークションですと、一日数千件の終了データがあると思います

この場合、まず終了時刻をテーブルにセットします。

その終了時刻テーブルを監視するデーモンが動いており、終了時刻になった取引を検出次第、終了手続きタスクを起動するのが一般的かと思います。

この際、監視デーモンが複数起動しないようにしておくことが肝要です。

◎質問者からの返答

ありがとうございます。


5 ● kazumichi
●20ポイント

マッシュアップ的サイト構築のために、(a)で2000行、(b)で3000行くらいのLAMP実装経験を持つものです。

結論から言いますと、(a)がお勧めです。

理由は、Perlはデーモンに常駐させることを想定した言語ではなく、ネットワークの遅延などでプログラムの反応が遅くなったり無くなることがまれにり、その際catch exceptionなどの救済実装があまり一般的でないためです。

(b)でもプログラムの反応に目を瞑れば可能ですが、バグが一つでもあると落ちてしまうので、バグをすべて取り除く作業が非常に煩雑でした。(その際、Encode.pmのconvertの'auto'における潜在的なバグなど、自分のプログラム以外の箇所で腐心しました。)

ただし、実際インプリしてみて、起動や処理にかなり時間が要するプログラムが出来上がった場合は、この手法を選択することになると思います。

言うまでもないことかもしれませんが、(a)の場合、「lockファイルを使う」「psで同一のプロセスが生きてないか確認する」など重複回避処理をお忘れなく。

(間違った表現があればお許しください。)

◎質問者からの返答

実務に基づくアドバイスで大変参考になります。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ