1

我陷入了困境。我想知道基于每日、每周、每月和所有时间的 Fetch 计数。在 Datastore 中,计数约为 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 回答