在我的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