我的应用程序连接到G Suite域,一个罕见的功能允许下载列出所有用户的csv。
该文件已保存到Google存储空间并从那里下载。
虽然它适用于普通域,但更大的域(½M用户)具有可扩展性问题。 CSV变得巨大,导致:
Exceeded soft private memory limit of 128 MB with 340 MB after servicing 9 requests total
据我所知,我不能进行增量上传,我能想到的每个解决方法都必须在某个时候将文件保存在内存中。
我不知道的任何解决方法?
开箱即用的想法就像增量保存到云端硬盘一样?而是避免额外的范围。
答案 0 :(得分:0)
如果您保持能够将整个文件(和/或其关联数据)保留在内存中的要求,则唯一的解决方案是通过instance_class
配置项使用a GAE instance class更多内存在app.yaml
配置文件中。
当然,只要内存要求保持在其中一个可用实例类的可用内存之下,此解决方案才能工作,它不会无限期地缩放CSV大小。
答案 1 :(得分:0)
我之前在App Engine上实现了这样的批量导出功能。我是通过使用App Engine通过API启动临时计算引擎VM来实现的。一旦Compute VM启动,它就会运行一个简单的脚本,然后自行关闭。
计算引擎VM的优势在于您可以自由地写入临时磁盘空间,从而节省内存。默认情况下,GCE实例有10GB的根磁盘,希望足够but this can be increased。
在GCE实例中,您可以进行GSuite API调用并将导出构建为磁盘上的临时文件,然后在准备就绪后,您可以使用drive或google云存储apis上传它。然后将计算引擎实例添加到shut itself down。
使用App Engine中的GCE API并不像听起来那么难。我wrote up a detailed blog post描述了如何在App Engine上设置可以控制计算引擎实例的Web服务。最后,它链接到github上的完整可部署示例。你必须编写脚本来进行导出,但是如果你可以制作脚本的Docker镜像,那么这个服务可以运行它!