2013-11-21 35 views
2

我試圖處理大(〜50MB)大小的XML文件中的數據存儲到存儲大(> 32MB)XML文件。我嘗試過使用後端,套接字(通過urlfetch提取文件),甚至直接在源代碼中上傳文件,但又一次保持運行極限(即32 MB限制)。處理過的AppEngine

所以,我真的很困惑(和有點生氣/沮喪)。 appengine真的沒有真正的方法來處理一個大文件?似乎有一個潛在的工作,這將涉及remote_apis,亞馬遜(或谷歌計算我猜)和安全/設置的噩夢...

Http範圍是我考慮的另一件事,但它會很痛苦以某種方式不同的分裂部分連接在一起(除非我可以管理處裂開確切點文件)

這太瘋狂了,所以我認爲我會問stackover流......我失去了什麼?

更新 嘗試使用範圍請求,它看起來像我試圖從中流動的服務器不使用它。所以現在我想無論是下載文件,主機託管到另一臺服務器上,然後使用AppEngine上訪問經由後端範圍的HTTP請求,然後自動完成整個過程,所以我可以運行它作爲一個cron作業:/(瘋狂必須做這麼簡單的工作...... 嘆息

回答

1

如何將它存儲在雲存儲中並逐步讀取,就像你可以一行一行地訪問它(在Python中一樣),所以它不會消耗所有資源。

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

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

的GCS客戶端庫讓您的應用程序從文件中讀取和寫入 文件在谷歌雲存儲(GCS)桶。該庫支持 讀取和寫入大量數據,以GCS,與內部錯誤 處理和重試,所以您不必編寫自己的代碼來完成這個 。此外,它提供了預取讀取緩衝,因此您的應用程序可以更高效。

的GCS客戶端庫提供了以下功能:

返回一個類文件緩衝區上,你可以調用 標準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增量閱讀!

+0

哇,這能救我一噸的時候,我會馬上試試保羅。快速的問題是,爲Google雲端存儲設置一個cron作業以便urlfetch一個外部文件來更新它的存儲箱是非常容易的嗎? – iceanfire

+0

有一個JSON接口,我相信這可能會有所幫助,但是GCS只是數據的「桶」,因此您不能設置可以運行的cron。我已經通過「手工」複製文件然後通過python/GAE訪問文件來使用它,但我沒有「自動化」那些恐懼的事物。 –

+0

Gotchya,抱歉只是更多的問題,你在後端運行python代碼? GCS.open連接可以保持多久?如果我在後端運行,它是否有限制?如何開始下一次迭代?謝謝@保羅! – iceanfire