Google app engine AppEngine任务以创建多个实体

Google app engine AppEngine任务以创建多个实体,google-app-engine,google-cloud-datastore,mapreduce,Google App Engine,Google Cloud Datastore,Mapreduce,我正在为参加活动的人创建一个应用程序。我需要为特定事件的个人实体子集创建一个票证实体。人数可能超过50000人 显然,我不能只做一个for循环,迭代一个Person查询并生成这些票据 我如何在应用程序引擎上构建它,有没有一种方法可以利用MapReduce?您可能想看看。您可以在Parralel中挤出一组任务队列来完成您想要的工作。您可能希望查看google文档中的,这可能有助于将您推向正确的方向。如果您选择后端,请求可以持续很长时间,则可以在单个for循环中进行迭代。但在我看来,这样长时间运行的

我正在为参加活动的人创建一个应用程序。我需要为特定事件的个人实体子集创建一个票证实体。人数可能超过50000人

显然,我不能只做一个for循环,迭代一个Person查询并生成这些票据


我如何在应用程序引擎上构建它,有没有一种方法可以利用MapReduce?

您可能想看看。您可以在Parralel中挤出一组任务队列来完成您想要的工作。您可能希望查看google文档中的,这可能有助于将您推向正确的方向。

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

我读到关于延期图书馆的消息。有时它的行为会很奇怪,对数据进行酸洗可能会带来一些麻烦。对于TaskQueue API,我可以这样做,但我不建议这样做,尽管编写代码非常容易,但缺点是它会对数据进行pickle处理,将其放入一个实体中,然后加载并取消pickle,这会耗费大量开销。投入30000个实体大约花费我3个CPU小时

最便宜的方法是只使用将人分开并使用钥匙或其他位置信息排队的方法。插入使用少于1个CPU小时的相同30K实体

在您的问题中,获取100万个实体和运行速度非常快,这取决于GAE的设计,只需这样做。最慢的部分是存储新的票证实体

顺便说一句,
为什么不仅仅是
Person.all().filter(“类似参加活动的东西”)

通过MapReduce,我的意思是映射每个人实体并检查他们是否参加活动,然后为他们创建记录单。但是,如果参加活动的人数不到整个人群的1%,这不是非常低效吗?我考虑过使用Mapper类之类的工具。我唯一担心的是处理是串行进行的——如果我有100万人的实体要运行,作业将永远运行。它肯定会运行很长时间,但延迟任务在其时间段用完时会出现异常,允许它重新查询下一项。此外,您还可以启动许多针对数据集的延迟任务,将隔离数据作为任务的一部分(即起点和终点)传入,并让每个数据块仅迭代该数据块。这样,如果有100万人参加某个活动,而这还不到数据库的1%,您就可以对工作负载进行分片和分块。。。祝贺你?@Nick我的观点是MapReduce似乎适用于100万,但Mapper可能更适用于较小的集合。那么,在没有相同效率的情况下,在并行性方面出错是不是更好呢?@Nikolaj对于实际的票证数量(50k),使用延迟的序列号应该不会花费太长时间,尽管您确实希望对其进行基准测试。或者,您可以等待mapreduce添加对过滤数据集映射的支持,或者像@Wolfwyrd建议的那样,将您自己的切分添加到延迟任务中。这其中的一些取决于您如何生成票-例如,您是否需要分配唯一的座位号?