使用TaskQueues突发处理能力?

我有一种情况,我想对数据存储区进行1000次不同的查询,对每个单独查询的结果进行一些计算(获得1000个单独的结果),并返回结果列表。 我想将结果列表作为来自开始计算的相同30秒用户请求的响应返回,以获得更好的客户端性能。哈! 我有一个大胆的计划。 这些操作中的每一个单独地通常在一秒钟内完成没有问题,它们都不需要写入与任何其他实体组相同的实体组,并且它们都不需要来自任何其他查询的任何信息。可能有可能启动1000个独立任务,每个任务执行其中一个查询,进行计算,并将结果存储在某种临时实体集合中?原始请求可能等待10秒,然后对数据存储区的结果执行单个查询(可能它们都设置了我可以查询的唯一值)。任何尚未结果的结果都会在客户端被注意到,客户端可能会在另外十秒内再次询问这些值。 我希望有经验的人可以回答的问题是: 这是荒唐的吗?如果是这样,任何数量的任务都是荒谬的吗? 50会立刻合理吗? 如果我每秒读取同一个实体20次,我不会遇到数据存储争用,对吗?那个争论的东西都是为了写作? 是否有更简单的方法来获取任务的响应?     
已邀请:
是的,听起来很可笑:) 你不应该依赖Taskqueue这样操作。您不能依赖快速生成的1000个任务(尽管他们很可能会这样做)。 为什么不使用Channel API等待您的回复。所以你的解决方案成为 客户端向服务器发送请求 服务器生成N个任务以进行计算,并使用Channel API令牌响应客户端 客户端使用令牌侦听Channel 完成所有任务后,服务器会通过Channel将响应推送到客户端 这样可以避免由于任务没有按照您的喜好快速执行或其他原因而不时出现的任何超时问题。     
任务队列不能确保任务何时执行 - ETA(默认为当前时间)是执行的最早时间,但是如果队列已备份,或者没有可用的实例要执行任务,它可以在以后执行。 一种选择是使用Datastore Plus / NDB,它允许您并行执行查询。然而,无论你如何执行它们,1000个查询都将非常昂贵。 正如@Chris建议的那样,另一个选项是将任务队列与Channel API一起使用,这样您就可以在查询完成时异步通知用户。     

要回复问题请先登录注册