各プロジェクトを購読している特定の数の人々がいる「プロジェクト」を含むWebサイトがあります。
プロジェクトの「最後」に、すべてのサブスクライバーが収集され、処理されます。この場合、約 1,000 人のサブスクライバーがあり、そのデータを取得して処理する必要があります。また、配列内の各データ セットと共に格納される関連データもいくつかあります。
前回、最大 300 個のアイテムを処理したときに、PHP がメモリ不足になりました。メモリをブーストし、処理できるようにしました。今回はそんなことはないと思います。
現在、プロジェクトをプルしてサブスクライバーを処理するジョブを使用しています。このジョブでは、SQL クエリを実行してすべての「サブスクライバー」を取得し、それらとその関連データを配列に格納します。次に、配列が繰り返されて、個々のサブスクライバを処理する個々のジョブが作成されます。
私の質問は:
「ブロック」などでこれを行う方法はありますか? または、メモリへの影響を軽減するより良い方法はありますか? 何千人もの加入者がいる場合に備えて、これを拡張できるようにしたいと考えています。
今はこんな流れです。
- プロジェクト「終了」
- ジョブが開始され、いくつかのフラグが設定され、すべてのサブスクライバーがプルされます
- MySQL (サブスクライバー) からのデータの配列がループされ、サブスクライバーごとに個別のジョブが作成されます。
- 各サブスクライバ ジョブは、エンジンによって処理されます。
これを行うための最良のプロセスを特定するのに苦労しています。