我正在为参加活动的人们建立一个应用程序。我需要为特定事件的Person实体子集创建Ticket实体。人数可能超过50,000个实体。
显然我不能只做一个for循环,我遍历一个Person查询并生成这些Tickets。
如何在App Engine上构建它,有没有办法利用MapReduce?
答案 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")
。