【发布时间】:2014-04-26 00:14:43
【问题描述】:
在我的 NDB 数据存储中,我有超过 200 万条记录。我想将这些按created_at 日期分组的记录导出到 Google Cloud Storage 上的 CSV 文件中。我计算出每个文件大约 1GB。
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 中的所有记录吗?
【问题讨论】:
标签: google-app-engine csv mapreduce google-cloud-storage app-engine-ndb