为什么我得到DeadlineExceededException:在我的Web应用程序中?

时间:2011-10-08 11:10:56

标签: java eclipse google-app-engine exception servlets

我正在使用谷歌应用引擎。在一切正常之前,但现在当我调用servlet时,浏览器会花费大量时间然后显示:

 DeleteBooksServlet: com.google.apphosting.api.DeadlineExceededException: This request (0000000000000000) started at 2011/10/08 10:58:13.573 UTC and was still executing at 2011/10/08 10:59:13.036 UTC.

在该servlet中,我有一个查询,它从数据库中获取所有书籍,然后删除它们。

在相同的servlet工作正常之前,但现在我得到了这个。为什么我现在得到这个东西?提前谢谢。

2 个答案:

答案 0 :(得分:2)

因为数据库中肯定有这么多书,所以查询需要花费很多时间(超过1分钟),并且当请求太长时,GAE会抛出此异常。

请参阅http://code.google.com/intl/en-US/appengine/docs/java/runtime.html#Quotas_and_Limits

答案 1 :(得分:2)

删除n本书需要O(n)次。当该时间超过请求限制时,您需要更快地完成该操作。

一种非常好的通用技术是将删除分成批处理,批处理可以删除,例如100本书。然后使用任务队列框架来计划和运行批处理。有些人更进一步,并使用MapReduce框架来管理批处理。