我正在尝试使用带有电子表格gem(http://spreadsheet.rubyforge.org/)的heroku中的DelayedJob将大约300k记录导出到XLS。不幸的是,我需要迭代所有记录,因为某些字段是从其他相关表中提取的。
导出到CSV工作正常(尽管需要花费很多时间),并且可以直接将每条记录写入S3,就像我通过它们一样。
问题是使用电子表格gem,我似乎无法有效地导出这些记录的XLS报告,因为该过程会非常快地消耗大量内存。
所以问题是:
如何将数据库中的大量数据导出到将托管在S3上的XLS文件,考虑到1.您无法写入heroku上的文件系统,2。您不应该超过512MB的内存配额?
答案 0 :(得分:1)
在雪松上你可以写入文件系统,虽然它仍然是短暂的,每天至少会消失一次,并且代码推送,重启等等。
我不熟悉您提到的特定宝石,但最好的方法是分批处理记录,以便垃圾收集器可以随时随地取出。
如果你能找到一些更好的自定义sql,你可以让postgres做相关表中的字段拉动工作。
此外,您应该查看游标以避免加载整个数据集:http://www.postgresql.org/docs/8.3/static/plpgsql-cursors.html