1

大変な事態に陥ってしまいました。毎日、毎週、毎月、全時間に基づいて Fetch の回数を知りたいです。データストアでは、カウントは約 2,368,348 です。Model または GqlQuery でカウントを取得しようとすると、500 エラーが発生します。行が少ない場合、以下のコードは正常に機能しています。

グルが私を訂正したり、正しい解決策を教えてくれませんか? 私はPythonを使用しています。

モデル:

class Fetch(db.Model):
    adid = db.IntegerProperty()
    ip = db.StringProperty()
    date = db.DateProperty(auto_now_add=True)

統計コード:

adid = cgi.escape(self.request.get('adid'))
...
query = "SELECT __key__ FROM Fetch WHERE adid = " + adid  + " AND date >= :1"  
rows = db.GqlQuery( query, monthlyDate)
fetch_count = 0
for row in rows:
   fetch_count = fetch_count + 1
self.response.out.write( fetch_count)
4

1 に答える 1

1

あなたのクエリは、GAE がクエリの実行を許可するよりも長い時間がかかっているようです (通常は最大 60 秒)。count() ドキュメントから:

結果の数が少ないと予想される場合を除き、制限引数を指定するのが最善です。それ以外の場合、メソッドはカウントが終了するかタイムアウトになるまで続行されます。

リクエストタイマーのドキュメントから:

リクエスト ハンドラーがリクエストに対するレスポンスを生成して返す時間は限られています (通常は約 60 秒)。期限に達すると、リクエスト ハンドラが中断されます。

aDeadlineExceededErrorが発生している場合、これが問題です。このクエリを実行する必要がある場合は、GAE でバックエンドを使用することを検討してください。バックエンドでは、リクエストを生成して返すための時間制限はありません。

于 2012-09-14T16:12:20.610 に答える