AppEngine任务创建许多实体

时间:2011-07-14 09:23:38

标签: google-app-engine google-cloud-datastore mapreduce

我正在为参加活动的人们建立一个应用程序。我需要为特定事件的Person实体子集创建Ticket实体。人数可能超过50,000个实体。

显然我不能只做一个for循环,我遍历一个Person查询并生成这些Tickets。

如何在App Engine上构建它,有没有办法利用MapReduce?

3 个答案:

答案 0 :(得分:1)

您可能需要查看Deferred library。您可以并行处理一堆任务队列,以完成您想要的工作。您可能需要查看Google文档中的Mapper example class,这可能会帮助您朝着正确的方向前进。

答案 1 :(得分:1)

如果请求可以持续很长时间的后端,则可以在单个for循环中进行迭代。但是在我看来,这种长期运行的过程并不是一件好事。我想正确使用任务队列已经足够了。

我读到了Deferred库。有时它表现得很奇怪,并且腌制你的数据会引起一些麻烦。我可以使用TaskQueue API

答案 2 :(得分:0)

我不建议使用Deferred Library,虽然编写代码非常容易,但缺点是它会篡改你的数据,把它放到一个实体中,以后加载和取消它会花费很多开销。放30K实体花费我 3 CPU小时

最便宜方式只是使用分割Person的Task Queue并使用键或其他位置信息入队。插入使用少于 1 CPU小时的相同30K实体。

在你的问题中,获取100万个实体并且运行速度非常快取决于GAE的设计,就这样做。最慢的部分是存储新的Ticket实体。

顺便说一句, 为什么不只是Person.all().filter("something like attending events")