2012-01-28 10 views
1

私はGoogle App Engineに自分のサーバーを持っています 私の仕事の1つは、膨大な数のレコードを別のものと照合することです。 10000レコードと100を一致させる必要がある場合、これは非常に時間がかかります。 これを実装する最良の方法は何ですか?Google Apps Engineのタスクキューまたはマルチスレッド化

私はWeb2pyスタックを使用し、Google App Engineに自分のアプリケーションをデプロイしました。

答えて

1

多分私は誤解しているかもしれませんが、タスクキューの完璧なマッチのように聞こえますが、マルチスレッドがどのように役立つのか分かりません。あなたの応答が30秒の制限より長くかかる場合は助けてください。

タスクを追加することができます。その後、制限時間まで処理してから、制限時間までにジョブを終了していない場合は残りのタスクを再作成します。

+0

そのないWebサービスリクエスト。定期的に実行されるcronジョブ。ですから、私の主な仕事は1000回の比較を少なくし、タスクをキューに追加することです。それは意味をなさない? – Shirish

1

コードのマルチスレッディングは、GAEではサポートされていないため、明示的に使用することはできません。

GAE自体はマルチスレッド化することができます。つまり、1つのフロントエンドインスタンスが複数のhttp要求を同時に処理できます。

あなたの場合、並列タスクを実行する最も良い方法はタスクキューです。

+0

GAEのpython27でマルチスレッドがサポートされていないことを意味しますか? – Chameleon

+0

SDK 1.6.4では、バックエンドインスタンスでのみバックグラウンドスレッドを使用できます。https://developers.google.com/appengine/docs/python/backends/overview#background_threads –

1

基本的な構造は、作業をより小さな単位に分割し、各単位をタスクキューで実行することです。各タスクのペイロードは、最初のセット(キーのセットなど)のエンティティを識別する情報です。各タスクは、最初のセットのエンティティを2番目のセットのエンティティと結合するために必要なクエリを実行し、中間の(または最終的な)結果を格納します。ペイロードのサイズとタスクのキューレートは、あなたが望むやり方になるまで微調整することができます。

各タスクの結果を集計する必要がある場合、すべてのタスクが完了したかどうか、または完了レコードをポーリングする別のジョブがあるかどうかを各タスクに記録して、集約を起動できます。 MapReduce機能がより広く利用可能になると、このような作業を行うためのフレームワークになります。

http://www.youtube.com/watch?v=EIxelKcyCC0 http://code.google.com/p/appengine-mapreduce/

+0

ありがとう。私はあなたが言及したビデオを通過しましたが、私は質問があります。 MapReduceパイプラインは大量のデータを確実に処理しません。私は本当に比較の小さな塊に分解する必要がありますか? – Shirish

+0

正しいですが、MapReduceユーティリティがチャンクと実行を処理します。あなたは地図と減額を提供します。 :)上記の私の答えでは、「作業をより小さな単位に分割する」というのは、MapReduceを使用していない場合の作業で、タスクと任意の量のデータで直接実装することです。このように考えると、パフォーマンスを微調整することができるノブがあります。タスクごとのレコード数です。タスクごとに1つのタスクを各レコードに作成できますが、リソースを最大限に活用することはできません。 –

関連する問題