2017-09-29 3 views
-1

私たちはPHP 7を使用しており、128 MBのRAMしか搭載していないWebサーバー上でMySQL DBを実行しています。 データセットの処理に問題があります。 簡単な説明:40.000個の製品があり、更新する必要があるかどうかを調べるために、これらの製品にデータを収集したいと考えています。 1000万のデータセットを持つ別のテーブルから特定のデータを収集するクエリには、いくつかのSUM関数が含まれているため、1.2秒かかります。 SUMに関連する時間範囲が異なるため、すべての製品について個別にクエリを実行する必要があります。クエリの大量のために、すべての製品を繰り返し処理する関数はタイムアウト(5分後)を返します。そのため、関数を呼び出すcronjobを実装し、最後に終了した製品。私たちは5分ごとにcronjobを呼び出します。 しかし、40,000製品では、すべての製品が処理されるまでに30時間かかります。 cronjobごとに、私たちの関数は約100個のプロダクトを処理します... このような大量のデータをどのように扱うことが可能ですか?たとえば、それを並列化する方法はありますか?誰かに別のアイデアがありますか?サーバーのアップデートは解決策ですか?処理するデータ量は、PHPとSQLの合計が1000万です。

ありがとうございます! ナディ

+0

「サーバーの更新は解決策ですか?」明らかに、あなたがRAM(そしておそらくCPU)を使い果たしているなら、そうです。 pthreadはさらに多くのRAMとCPUを使用します。 – rndus2r

答えて

0

並列処理にもリソースが必要なので、128 MBではそれは役に立ちません。

システムを監視して、ボトルネックがどこにあるかを確認します。おそらくそれは非常に低いので、おそらくメモリ。ボトルネックリソースを見つけたら、それを増やす必要があります。オーバーロードされたサーバーの問題を解決するチューニングと修正の量はありません。

これはサーバーリソースの問題(!)ではないことがわかっている場合、クエリレベル(多くのジョイントには、いくつかのインデックスが必要です...)にある可能性があります。そしてあなたの5分。タイムアウトを増加させる可能性があります。

しかし、サーバーから始めてください。

関連する問題