2012-09-14 43 views
1

我已陷入困境。我想知道基於每日,每週,每月和所有時間的Fetch計數。在數據存儲中,計數約爲2,368,348。每當我嘗試通過Model或GqlQuery獲取計數時,我都會得到一個500錯誤。當行數少時,下面的代碼工作正常。計數方法拋出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) 
+2

看看日誌。你會得到一個截止日期超出的錯誤。您正在嘗試的內容不適用於前端請求。 –

回答

1

它看起來像你的查詢花費比GAE不再允許查詢運行(通常約60秒)。從count() documentation

除非結果計數預計很小,否則最好指定一個限制參數;否則該方法將繼續,直到完成計數或超時。

Request Timer documentation

請求處理具有有限的時間量,以生成並返回到一個請求的響應,通常約60秒。一旦到達截止日期,請求處理程序就會中斷。

如果提出DeadlineExceededError,這是你的問題。如果您需要運行此查詢,請考慮在GAE中使用Backends。對於後端,生成和返回請求沒有時間限制。