1

次のようなGoogleアプリのバックエンドを作成しました。

backends:
- name: dbops
  options: dynamic

そして私はそれのための管理ハンドラーを作成しました:

- url: /backend/.*
  script: backend.app
  login: admin

これで、管理ジョブは永久に実行できるはずであり、このジョブをTaskQueueで起動していることを理解しましたが、何らかの理由でそうではありません。私の仕事は、はるかに大きなテーブルからデータストアにサマリーテーブルを作成することです。このテーブルには約12000レコードが保持されており、開発サーバーでジョブを処理するのに数分かかりますが、正常に機能します。コードをappspotにプッシュして同じジョブを実行しようとすると、データストアのタイムアウトのように見えます。

Traceback (most recent call last):
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py", line 1536, in __call__
    rv = self.handle_exception(request, response, e)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py", line 1530, in __call__
    rv = self.router.dispatch(request, response)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~myzencoder/dbops.362541511260492787/backend.py", line 626, in get
    for asset in assets:
  File "/base/python27_runtime/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 2314, in next
    return self.__model_class.from_entity(self.__iterator.next())
  File "/base/python27_runtime/python27_lib/versions/1/google/appengine/datastore/datastore_query.py", line 2816, in next
    next_batch = self.__batcher.next()
  File "/base/python27_runtime/python27_lib/versions/1/google/appengine/datastore/datastore_query.py", line 2678, in next
    return self.next_batch(self.AT_LEAST_ONE)
  File "/base/python27_runtime/python27_lib/versions/1/google/appengine/datastore/datastore_query.py", line 2715, in next_batch
    batch = self.__next_batch.get_result()
  File "/base/python27_runtime/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 604, in get_result
    return self.__get_result_hook(self)
  File "/base/python27_runtime/python27_lib/versions/1/google/appengine/datastore/datastore_query.py", line 2452, in __query_result_hook
    self._batch_shared.conn.check_rpc_success(rpc)
  File "/base/python27_runtime/python27_lib/versions/1/google/appengine/datastore/datastore_rpc.py", line 1224, in check_rpc_success
    raise _ToDatastoreError(err)
Timeout: The datastore operation timed out, or the data was temporarily unavailable.

誰かがこれを機能させる方法について何か提案がありますか?

4

2 に答える 2

2

バックエンドリクエストは長時間実行できますが、クエリは60秒間しか実行できません。クエリ結果をカーソルでループする必要があります。

Mapreduceは、クエリを並行して実行することで、より迅速に結果を取得します。

于 2012-10-18T17:13:07.597 に答える
1

本番環境ではHRデータストアを使用すると、競合の問題が発生する可能性があります。この記事を参照してください。 https://developers.google.com/appengine/articles/scaling/contention?hl=nl

そして、レポートを作成するためのmapreduceを見てください。多分これはより良い解決策です。

于 2012-10-18T15:53:25.127 に答える