在我的NDB數據存儲我有超過200萬分的記錄。我想將這些由created_at
日期分組的記錄導出到Google雲端存儲上的CSV文件中。我計算出每個文件大約1GB。出口NDB數據存儲記錄,以雲存儲CSV文件
2014-03-18.csv, ~17000 records, ~1GB
2014-03-17.csv, ~17000 records, ~1GB
2014-03-18.csv, ~17000 records, ~1GB
...
我的第一種方法(僞代碼):
import cloudstorage as gcs
gcs_file = gcs.open(date + '.csv', 'w')
query = Item.query().filter(Item.created_at >= date).filter(Item.created_at < date+1day)
records = query.fetch_page(50, cursor)
for record in records:
gcs_file.write(record)
但這個(顯然?)通向內存問題:
Error: Exceeded soft private memory limit with 622.16 MB after servicing 2 requests total
我應該使用MapReduce的管道相反,還是有什麼辦法讓方法1工作?如果使用MapReduce:我可以過濾created_at
而不迭代NDB中的所有記錄嗎?
相關:http://stackoverflow.com/questions/9124398/in-google-app-engine-how-to-i-reduce-memory-consumption-as-i-write-a-file-out-t – mattes