質問: (PHP&MySQL) hogeというDBがあるとします。ここにはユーザー名の userid というカラムとメールアドレスのemailというカラム、auto_incrementでつけた番号 number というカラムがあります。 又、ユーザーのメールアドレスを username.php というスクリプトで調べ email というカラムに入れています。 しかしユーザーのメールアドレスが良く変わり最新の情報をDBに登録するため毎週1回指定した時間に調べるようにさせたいのです。その際に大量にあるのでnumberの順に処理し、サーバーに負荷をかけないようnumberが1のレコードの処理が終わったら3秒おき、2のレコードの処理をという形にしたいです。又、200まで終わったら次は1時間後に201からといった感じの機能もつけたいと思っています。 以上を実現する簡単なソースをお願いします。
回答: DBの操作関連は抜きにして、特定の時間ごとに処理をさせるためのサンプルスクリプトを書いてみました。 コマンドラインのPHPで以下のスクリプトを実行すると、1、2、3...と3秒置きに数字を出力し、200の部分で1時間待った後、201を出力します。 参考にしてみてください。 ``` ``` DBの負荷が問題になるのは、同時にDBに大量のアクセスがある場合などが多いです。 サーバーに負荷がかかることを心配なさっているようですが、1件ずつUPDATEする程度でそれほど負荷が高くなることはないと思います。 CPU負荷、メモリ、両方とも特に問題ないと思いますので、一度開発環境などで処理を試してみて負荷を計測してみてはいかがでしょうか。 (すでに負荷が高いことが実証済みである場合は気になさらないでください。) また、ユーザのメールアドレスの変更はどのようにして把握していますでしょうか。 ユーザがメールアドレスの変更を画面上で行えるようにし、随時UPDATEするようにすれば、一括処理の負荷を心配する必要もないと思います。 色々と事情があるとは思いますが、処理が集中しないようにフローを見直すことも重要だと思います。 参考になれば幸いです。