1

すべての画像をダウンロードし、MD5ハッシュを計算して、そのハッシュをデータベースの新しい列に保存するスクリプトに取り組んでいます。データベースから画像を選択してローカルに保存するスクリプトがあります。画像の一意のIDがファイル名になります。

私の問題は、cURLQueueは多くのファイルをすばやくダウンロードするのに最適ですが、コールバックで各ファイルのMD5ハッシュを計算すると、ダウンロードが遅くなることです。それが私の最初の試みでした。次の試みでは、コードのダウンロード部分とハッシュ部分を分離したいと思います。これを行うための最良の方法は何ですか?私が最もよく知っているものであり、サーバーが実行しているものであるため、PHPを使用したいと思いますが、PHPのスレッドサポートは控えめに言っても不足しています。

SQLite接続を確立する親プロセスを用意し、画像を選択する多くの子を生成し、そのハッシュを計算してデータベースに保存し、画像を削除することをお勧めします。私は正しい道を進んでいますか?

4

2 に答える 2

1

これに取り組む方法はいくつかありますが、どちらを選択するかは、プロジェクトの詳細によって異なります。

簡単な方法は、1つのPHPで画像をダウンロードし、それらをファイルシステムに配置して、キューデータベースにエントリを追加することです。次に、2番目のPHPプログラムがキューを読み取り、待機中のキューを処理します。

2番目のPHPプログラムでは、cronジョブを設定して、定期的にチェックし、待機しているすべてのものを処理することができます。2番目の方法は、ダウンロードが完了するたびにバックグラウンドでPHPプログラムを生成することです。2番目の方法がより最適ですが、もう少し複雑です。PHPスクリプトをバックグラウンドで実行する方法については、以下の投稿を確認してください。

コマンドが完了するのを待たずにshell_execを使用する方法はありますか?

于 2012-11-19T20:23:26.757 に答える
0

職場で同様の問題を取り上げましたが、rabbitmqのようなamqpサーバーが必要になります。

3つのphpスクリプトがあると想像してください。

  • 最初:URLをキューに追加します
  • 2番目:キューからURLを取得し、ファイルをダウンロードして、ダウンロードしたファイル名をキューに追加します
  • 3番目:ファイル名をキューに入れ、md5をデータベースに設定します

このような方法を使用して、Pythonスクリプトを使用して複数の画像のダウンロード/処理を処理します(phpはそれほど遠くありません)。

ここでいくつかのphpライブラリとここでいくつかの基本的な例を確認できます

このようにして、各キューの長さに応じて各ワーカーをスケーリングできます。したがって、ダウンロードするURLが大量にある場合は、別のスクリプト#2を開始し、未処理のファイルが多い場合は、新しいスクリプト#3を開始します。

于 2012-11-19T21:35:42.403 に答える