我有一个任务端点需要处理从前端请求上传的数据(比如 >1MB 的文件)。但是,我认为我无法通过 TaskOptions.Builder 传递来自前端请求的数据,因为我会收到“任务大小太大”错误。
我需要某种“临时”数据存储来存储上传的数据,一旦任务成功处理它就可以将其删除。
方案A:将上传的数据存储在memcache中,将key传给task。这可能在大多数情况下都有效,除非在处理任务之前数据被逐出。如果可以解决这个问题,听起来是个不错的解决方案。
选项 B:将数据存储在数据存储中(为此目的创建的实体)。将 id 传递给任务。该任务负责在完成时删除实体。
选项 C:使用 Blobstore 服务。恕我直言,这在概念上类似于选项 B。
目前,我认为方案B是最可行的方式。
感谢任何有关处理这些情况的最佳方法的建议。
最佳答案
如果要存储大于 1mb 的数据,则必须使用 blobstore。 (是的,您可以对数据存储中的数据进行分段,但这样做不值得。)但是,有两件事需要注意。确保以小于 1mb 的 block 将数据写入 blobstore。此外,由于任务队列是幂等的,如果请求的 blobstore key 不存在,您的任务不应失败,因为之前的任务可能已经删除了它。
关于google-app-engine - 将(大型二进制)数据传递给应用引擎任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8677196/