当前位置: 首页 > 知识库问答 >
问题:

谷歌存储上传的可扩展性问题(来自GAE)

韩弘壮
2023-03-14

我的应用程序连接到G套件域,一个罕见的功能允许下载列出所有用户的csv。

该文件保存到谷歌存储并从那里下载。

虽然它在普通域中运行良好,但更大的域(½M用户)存在可伸缩性问题。CSV变得巨大,导致:

Exceeded soft private memory limit of 128 MB with 340 MB after servicing 9 requests total

据我所知,我不能做增量上传,我能想到的每一个变通方法都必须在某个时候将文件保存在内存中。

有什么我不知道的变通方法吗?

开箱即用的思维方式,比如增量存储到驱动器?而是避免额外的范围。

共有2个答案

解沈义
2023-03-14

我以前在应用引擎上实现过这样的批量导出功能。我这样做是通过使用应用程序引擎通过API启动临时计算引擎VM。一旦计算VM启动,它将运行一个简单的脚本,然后关闭自己。

计算引擎VM的优点是,您可以自由写入临时磁盘空间,从而节省内存。默认情况下,GCE实例有10GB的根磁盘,希望这足够了,但这可以增加。

在GCE实例中,您可以调用您的谷歌办公套件API,并将您的导出构建为磁盘上的临时文件,然后当它准备好时,您可以使用驱动器或谷歌云存储API上传它。然后让计算引擎实例关闭自己。

从AppEngine使用GCEAPI并不像听起来那么难。我写了一篇详细的博客文章,描述了如何在appengine上设置一个可以控制计算引擎实例的web服务。最后,它链接到github上的一个完整的可部署示例。您必须编写脚本才能进行导出,但如果您可以制作脚本的Docker映像,此服务可以运行它!

蒋鹏鹍
2023-03-14

如果您保持能够将整个文件(和/或其相关数据)保留在内存中的要求,那么唯一的解决方案是通过应用程序中的实例类配置项,使用具有更多内存的GAE实例类。yaml配置文件。

当然,这个解决方案只能在内存需求低于一个可用实例类的可用内存的情况下工作,它不会无限期地随CSV大小扩展。

 类似资料:
  • 我应该做什么才能成功上传图片?任何帮助都将不胜感激。 非常感谢。

  • 我正在寻找将文件上传到存储桶的 。这是因为我有一个匿名用户,某种程度上是一个公开的API密钥。稍后我将实现每个用户的ACL,但现在我只需要它来工作/上传。 现在,我在Amazon Cloud上也做了类似的工作,有一个简单的基于jQuery的小部件,可以上传文件,我只需要输入它们的和bucket名称(很遗憾,这是在中)。 只要一个简单的

  • 我们一直在使用服务,在(AWS)中,我们意外删除了一个目录,因此我们认为它应该在中,但是经过查看,尽管处于打开状态,但它并不存在。

  • 在谷歌云存储中,我在名为图像的根桶中有一个名为猫的桶。我正在使用google-api-ruby-Client gem上传文件。我可以将文件上传到根桶“图像”,但上传到“图像/猫”不起作用。我知道谷歌云存储中的存储桶没有斜杠的概念,所以我无法弄清楚如何指定嵌套存储桶的名称。 这给出了nil:NilClass的错误

  • google cloud bucket中的结果将具有正确的video/mp4 mimetype(这是由浏览器决定的),但仍然无法在浏览器上查看。 编辑: 我也尝试过使用chrome扩展名“Postman”在收到一个可恢复的上传链接后上传一个文件,但它的属性在上传到GCS时也会丢失,所以它似乎与将文件上传到GCS时涉及的JS端无关。

  • 追踪下面。 相关的Python片段: 最终触发(从ssl库): 溢出错误:字符串长度超过2147483647字节 我想我缺少一些特殊的配置选项? 这可能与这名1.5岁的年轻人有关,显然他还没有解决问题:https://github.com/googledatalab/datalab/issues/784. 谢谢你的帮助! 完整跟踪: [File”/usr/src/app/gcloud/downlo