appengine任务有效载荷有多大?

时间:2009-12-22 03:02:34

标签: java google-app-engine scheduled-tasks payload

我正在使用java appengine的新实验任务队列,而我正在尝试创建在我的数据存储区中聚合统计信息的任务。我正在尝试计算数据存储区中所有权限(特定类型)中的UNIQUE值的数量。更具体地说,类型X的实体具有字段A.我想计算数据存储区中A的唯一值的NUMBER。

我目前的方法是创建一个任务,查询X类型的前10个实体,创建一个哈希表来存储A in的唯一值,然后将此哈希表作为有效负载传递给下一个任务。下一个任务将计算接下来的10个实体,依此类推,直到我完成所有实体。在执行最后一个任务的过程中,我将计算哈希表中的键数(一直从任务传递到任务),以查找唯一值的总数A.

这适用于我的数据存储中的少量实体。但是我担心一旦我有很多独特的值,这个哈希表就会变得太大了。 appengine任务的有效负载的最大允许大小是多少?????

你能建议任何其他方法吗?

感谢。

3 个答案:

答案 0 :(得分:14)

答案 1 :(得分:1)

“你能建议任何其他方法吗?”。

通过基于值构建密钥并使用Model.get_or_insert为每个唯一值创建实体。然后Query.count使用普通的分页技巧,以1000个批次(或者在你的请求超时之前你可以计算多少个实体)的实体get_or_insert,使用正常的分页技巧。

或者使用类似于{{1}}文档中给出的代码来保持计数 - App Engine事务可以多次运行,因此事务中增加的memcached计数将是不可靠的。但是,可能会有一些技巧,或者您可以将数量保留在数据存储区中,前提是您没有对实体父项做任何不愉快的事情。

答案 2 :(得分:0)

这可能为时已晚,但也许它可能有用。首先,只要您有远程机会想要连续遍历一组实体,建议使用index_生成的date_created或date_modified auto_update字段。从这一点开始,您可以使用TextProperty创建一个模型,以使用json.dumps()存储哈希表。您需要做的就是传递最后处理的日期,以及哈希表实体的模型ID。使用date_created查询晚于最后一个日期,json_load()TextProperty,并累积接下来的10条记录。可能会变得更复杂(例如,通过利用传递的参数和一些不同的查询方法来处理date_created冲突)。向下一个任务添加1秒倒计时,以避免过快更新哈希表实体的任何问题。 HTH,-stevep