1

backupifyのようなサービスがあります。さまざまなソーシャルメディアプラットフォームからデータをダウンロードします。現在、約2500人のアクティブユーザーがいます。ユーザーごとに、Facebookからデータを取得してAmazon S3に保存するスクリプトを実行します。私のサーバーは、AWSのEc2インスタンスです。

Facebookユーザー用の900エントリのようなエントリがテーブルにあります。データベーステーブルからユーザーを実行して取得し、Facebookからデータをバックアップしてから、Facebookから次のユーザーを選択するPHPスクリプトがあります。

ユーザー数が1000人未満の場合はすべて問題ありませんでしたが、ユーザー数が2500人を超える場合は、PHPスクリプトが停止するか、最初の100ユーザーに対して実行されてから停止するか、タイムアウトするなどの問題があります。phpからPHPスクリプトを実行しています- qmyscript.phpコマンド。

もう1つの問題は、シングルユーザースクリプトがデータベーステーブルから最後のユーザーに到達するのに約65秒かかることです。そのため、データベーステーブルなどで並列を実行するための最良の方法は何ですか。

大量のユーザーのために大量のデータをバックアップするための最良の方法を教えてください。マンガのようにcronを監視できるはずです。

4

1 に答える 1

2

正しく理解できれば、すべてのユーザーに対して 1 つの cron タスクがあり、一定の頻度で実行され、すべてのユーザーのデータを一度に処理しようとします。

  1. set_time_limit(0);を発行してみましたか? コードの最初に?
  2. また、タスクがリソースを必要とする場合、N ユーザーごとに個別の cron タスクを作成することを検討しましたか (基本的にマルチスレッドの動作を模倣し、サーバーの複数の CPU コアを利用します)。
  3. データベースではなくある種のキャッシュにデータを書き込み、別のタスクでキャッシュの内容をデータベースにコミットすることは実行可能ですか?
  4. インメモリ データ テーブルを使用する機会はありますか (非常に簡単です)。ときどき DB の内容をディスクに永続化する必要がありますが、この価格で高速な DB アクセスが得られます。
  5. タスクを外注して、サーバーを分散サービスとして分離し、それらのロード バランサーとして cron スクリプトを記述できますか?
  6. また、コードを最適化することも役立つ場合があります。たとえば (まだ行っていない場合)、収集したデータをバッファリングし、スクリプトの最後に単一のトランザクションでコミットして、実行フローが DB の繰り返し I/O ブロックによって分散されないようにすることができます。
于 2013-03-18T11:22:38.580 に答える