5

私は主にPHPで書かれたAmazonのMWSAPIを利用するアプリケーションに取り組んでいます。このアプリケーションを使用すると、AmazonセラーはサインアップしてAmazonセラーのクレデンシャルを提供し、アプリケーションはこのユーザーの注文をAmazonからダウンロードしてMySQLデータベースに配置し始めます。

複数の関数を備えたスクリプトを使用してデータをデータベースに正確に同期するメソッドを作成しましたが、これには時間がかかりすぎることに気付きました。このスクリプトは、データベース内のすべてのユーザーをループし、すべての注文を一度に1つずつ繰り返します。現在、テストユーザーは5人だけなので、時間は実行可能ですが、より拡張可能な方法を探しています。一度に1人ずつ同期して実行している500人のユーザーについて考えてみてください。長すぎる!

私はPHPにかなり慣れておらず、特にPHPから非同期プロセスを実行しています。これを実行できる唯一の方法は、データベース内のすべてのユーザーを検索し、各ユーザーの同期スクリプトを生成してから解放するスタータースクリプトを用意することです。500人以上のユーザーがいた場合、夜間の同期はこのPHPスクリプトの500個の生成されたインスタンスで構成されるため、このアイデアは好きではありません。

誰かが以前にこれに似た何かをしたことがありますか?もしそうなら、私はこの同期をより効率的にするための最良の方法を聞きたいです。

4

3 に答える 3

2

PHPはマルチスレッド1にすることはできないため、実際には2つの選択肢しかありません(これを行うにはいくつかの方法がありますが、それらはすべて次のカテゴリに要約されます)。

  • ユーザー操作ごとに1つのプロセスがあります。あなたが言うように、大規模なデータベースでは、これは多くのプロセスをもたらす可能性があります。
  • 複数のユーザーを処理するプロセスがあります。各プロセスは事実上同期しているため、これには時間がかかる可能性があります。

最善の策は、2つのアプローチを組み合わせることです。したがって、複数のユーザーを処理する複数のプロセスがあります。したがって、500人のユーザーがいる場合は、それぞれ5人のユーザーを処理する100個のプロセス、またはそれぞれ10人のユーザーを処理する50個のプロセスを生成します。

あるいは、必要に応じてPHPから開始できる、タスクに適した言語(JavaやPerlなどのマルチスレッドをサポートする言語)でプログラムを作成する価値があるかもしれません。

1 2013年3月編集:PHPはマルチスレッド化できるようになりましたが、pthreads拡張機能は依然として非常に不安定であるため、本番環境での使用はお勧めしません。また、平均的なユーザーにはお勧めしません。これは、自分が何をしているかを本当に理解している場合にのみ使用してください。

于 2011-10-17T14:26:21.057 に答える
1

DaveRandom に同意します。独自のhttp://www.php.net/manual/en/class.httprequestpool.phpを作成するのではなく、HTTP リクエスト プールの実装を確認してください。

于 2011-10-23T07:54:05.827 に答える
0

パススルーを使用して、スクリプトをバックグラウンドに渡すことになりました。これまでのところ、物事はうまくいっているようです。

于 2011-11-10T18:38:26.093 に答える