2012-01-29 19 views
1

我想用電子表格gem(http://spreadsheet.rubyforge.org/)在heroku中使用DelayedJob導出約300k條記錄到XLS。不幸的是我需要迭代所有記錄,因爲有些字段是從其他相關表中提取的。在Heroku上導出一個大的XLS文件

導出爲CSV可以正常工作(儘管需要很長時間),並且可以直接將每條記錄寫入S3,因爲我會經歷它們。

問題是,使用電子表格寶石,我似乎無法有效地導出這些記錄的XLS報告,因爲該過程將非常快速地消耗大量內存。

所以,問題是:

你將如何從數據庫導出大量數據,以將在S3上被託管,考慮到1,你不能寫在Heroku和2文件系統中的XLS文件。你不應該超過512MB的內存配額?

+1

XLS具有每片65K記錄限制反正所以你可能會想堅持使用CSV。 – pguardiario 2012-01-29 23:44:11

回答

1

雪松您可以寫入到文件系統,雖然它仍然是短暫的,一天會消失至少一次,並在代碼推,restartes等

我不熟悉的特定寶石你提到,但是最好的方法是在批處理記錄中進行工作,這樣垃圾收集器就可以隨意釋放事物。

如果你能弄清楚一些更好的自定義sql,你可以讓postgres做拉相關表的字段的工作。

另外,你應該看看光標,以避免加載整個數據集:http://www.postgresql.org/docs/8.3/static/plpgsql-cursors.html