1

PHP スクリプトを毎晩 cronjob として実行したいと考えています。PHP スクリプトは、約 145.000 の製品を含む XML ファイルをインポートします。各製品には、ダウンロードしてサーバーにも保存される画像へのリンクが含まれています。これにより、過負荷が発生する可能性があると想像できます。だから私の質問は、PHPファイルを分割する方が良い考えですか? もしそうなら、より良い解決策は何ですか?より多くの cron ジョブが、互いに数分間一時停止しますか? exec を使用して別のPHPファイルを実行します(そうではないと思いますが、それが大きな違いを生むとは想像できません)、または他の何か...?それとも、1 つのスクリプトを使用してすべての製品を一度にインポートしますか?

前もって感謝します。

4

2 に答える 2

1

開いているファイルやデータベース接続がリークしないかどうかは、どのように記述したかに大きく依存します。また、使用しているphpのバージョンによっても異なります。PHP 5.3 では、ガベージ コレクションに対処するために多くのことが行われました。

http://www.php.net/manual/en/features.gc.performance-considerations.php

操作がトランザクションであることが重要ではない場合、つまり、すべてかゼロか (たとえば、途中で失敗した場合) は、スクリプトの各実行が次の x 個のアイテムを処理するチャンクでこれに取り組みたくなるでしょう。かかる時間に応じて変数になります。そのため、何も行われなくなるまでスクリプトを繰り返し続ける必要があります。

これを行うには、Fat Controller というツールを使用することをお勧めします。

http://fat-controller.sourceforge.net

スクリプトを繰り返し続け、すべてが完了すると停止することができます。Fat Controller に、まだやるべきことがある、または PHP スクリプトからの終了ステータスを使用してすべてが完了したことを伝えることができます。Fat Controller Web サイトには、いくつかの使用例があります。たとえば、http: //fat-controller.sourceforge.net/use-cases.html#generating-newsletters

Fat Controller を使用してプロセスを並行して実行し、処理を高速化することもできます。ただし、並行して実行しすぎて速度が低下しないように注意してください。データベースに書き込んでいる場合、最終的にはハードディスクによって制限されます。これは、特別なことがなければ、最適な同時実行数が 1 になることを意味します。

最後の質問は、これをトリガーする方法です。おそらく、CRON から Fat Controller をトリガーするのが最善でしょう。

Fat Controller Web サイトには多くのドキュメントと例がありますが、具体的なガイダンスが必要な場合は、喜んでお手伝いします。

于 2013-10-17T20:10:23.293 に答える