通过appengine处理大(> 32mb)xml文件

时间:2013-11-21 14:59:14

标签: google-app-engine app-engine-ndb

我正在尝试处理大型(~50mb)大小的xml文件以存储在数据存储区中。我尝试过使用后端,套接字(通过urlfetch来拉取文件),甚至直接在我的源代码中上传文件,但是再次保持运行限制(即32 mb限制)。

所以,我真的很困惑(而且有点生气/沮丧)。 appengine真的没有办法处理大文件吗?似乎有一个潜在的工作,这将涉及remote_apis,亚马逊(或我猜的谷歌计算)和安全/设置噩梦......

Http范围是我考虑的另一件事,但以某种方式将不同的分割部分连接在一起会很痛苦(除非我能设法将文件分割成精确的点)

这看起来很疯狂,所以我想我会问堆栈流......我错过了什么?

更新 尝试使用范围请求,看起来我正在尝试从中流式传输的服务器不使用它。所以现在我正在考虑下载文件,将其托管在另一台服务器上,然后使用appengine通过后端上的范围http请求访问它然后自动化整个过程,这样我就可以将它作为一个cron作业运行:/(疯狂)必须为这么简单的事情做所有这些工作... 叹息

1 个答案:

答案 0 :(得分:1)

如何将其存储在云存储中并逐步读取,因为您可以逐行访问(无论如何都是Python),因此它不会消耗所有资源。

https://developers.google.com/appengine/docs/python/googlecloudstorageclient/

https://developers.google.com/storage/

  

GCS客户端库允许您的应用程序读取和写入文件   文件到Google云端存储(GCS)中的存储分区。这个库支持   读取和写入大量数据到GCS,内部错误   处理和重试,因此您不必编写自己的代码   这个。此外,它提供了预读的读取缓冲,因此您的应用程序   可以更有效率。

     

GCS客户端库提供以下功能:

     

一个open方法,它返回一个可以调用的类文件缓冲区   用于读写的标准Python文件操作。一个listbucket   列出GCS桶内容的方法。一种统计方法   获取有关特定文件的元数据。删除的删除方法   来自GCS的文件。

我已经用这种方式处理了一些非常大的CSV文件 - 尽可能多地读取,处理,然后阅读更多。

def read_file(self, filename):
    self.response.write('Truncated file content:\n')

    gcs_file = gcs.open(filename)
    self.response.write(gcs_file.readline())
    gcs_file.seek(-1024, os.SEEK_END)
    self.response.write(gcs_file.read())
    gcs_file.close()

使用标准python进行增量读取!