0

PHP ベースの Web サイトでは、ユーザーは Dropbox アプリに自分の Dropbox フォルダーを使用する許可を与えます。その後、ユーザーは数千のテキスト ファイルをこのフォルダーに一度に、または継続的に配置し、処理してデータベースに保存し、表示する必要があります。ユーザーがWebサイトにログインしている場合は、できるだけ早く結果を取得します(ほぼリアルタイムで処理して出力したいと思います)。最小限のリソースでこれを行うための最良のテクノロジは何ですか? 最初は 30 人に対して行う必要がありますが、後で数百人のユーザーと即座に連携する必要があります。各ユーザーには数千のファイルがあり、一部のファイルは複数回処理する必要があります (増加しています) 他のファイルは必要ありません。

コマンド ライン php スクリプトを無限ループで実行して、Dropbox から定期的にファイルをコピーし、すべてのユーザーのファイルを処理するようにしましたが、遅すぎるようです。Dropbox サーバーへの API 呼び出しは非常に遅いように思われるため、継続的に実行することは最適なオプションではない可能性があります。
ユーザーが Web サイトの [インポート] ボタンをクリックすると、スクリプトは現在そのボタンをクリックしているユーザーのファイルのみを取得します。
あなたの提案は何ですか?PHPである必要はありません。これ専用のサーバーがありますが、ホスティングに適したソリューションも聞きたいです.

Dropbox の方法として、これらのファイルをサーバーに送る簡単で安全かつ高速な別の方法を教えてください。(私がこれを選択した理由は、Dropbox はユーザーがセットアップして使用するのが非常に簡単で、同期が非常に信頼性が高く、安全で高速であるためです。)

4

1 に答える 1

1

GNU Parallel http://www.gnu.org/software/parallel/がインストールされている場合は、これを実行したままにすることができます。

inotifywait -q -m -r -e MOVED_TO -e CLOSE_WRITE --format %w%f Dropbox_dir | parallel -u your_program

何かが Dropbox_dir の下の任意のディレクトリにアップロードされるたびに、your_programそのファイルに対して実行されます。parallelCPU コアごとに 1 つのジョブのみを実行するようにするため、ユーザーが一度に 10000 個のファイルをアップロードしても、サーバーが過負荷になることはありません。

すべてのユーザーに対して、次のことを行うだけです。

mkdir Dropbox_dir/user_folder

Dropbox がそこにファイルを配置するのを待ちます。

Dropbox が使用.dropbox.cache.dropboxているため、パスに含まれるファイルを無視する必要がある場合があります。

inotifywait ... | grep -v /.dropbox | parallel ...

これは、他のファイル転送方法 (FTP/Samba/Rsync/scp など) でも機能します。

GNU Parallel は次の方法で簡単にインストールできます。

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

詳細については、GNU Parallel の紹介ビデオをご覧ください: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

于 2012-06-02T18:32:51.710 に答える