2012-01-29 2 views
1

스프레드 시트 gem (http://spreadsheet.rubyforge.org/)에서 heroku의 DelayedJob을 사용하여 약 300k 레코드를 XLS로 내보내려고합니다. 불행히도 일부 필드는 다른 관련 테이블에서 추출되기 때문에 모든 레코드를 반복해야합니다.Heroku에서 큰 XLS 파일 내보내기

CSV로 내보내기는 시간이 많이 걸리지 만 정상적으로 작동하며 각 레코드를 S3에 직접 쓰는 것이 가능합니다.

문제는 스프레드 시트 젬을 사용하면 프로세스가 많은 메모리를 소비하기 때문에 이러한 레코드의 XLS 보고서를 효율적으로 내보낼 수없는 것입니다.

그래서 질문은 다음과 같습니다

어떻게 당신이 Heroku가 2의 파일 시스템에 쓸 수 없습니다 1. 점을 감안, S3에서 호스트됩니다 XLS 파일을 데이터베이스에서 많은 양의 데이터를 내보낼 것입니다. 512MB의 메모리 할당량을 초과해서는 안됩니까?

등 코드가 밀어에 아직도 임시이며, 적어도 하루에 한 번 멀리 갈 것이며, 비록 당신이 , 파일 시스템에 기록 할 수 삼나무, restartes에
+1

XLS는 아마 CSV 고수 할거야 어쨌든 시트 당 65K 기록 제한이 있습니다. – pguardiario

답변

1

내가 특정 보석에 익숙 해요 당신은 언급하지만, 최선의 접근법은 일괄 처리로 작업을하는 것이므로 가비지 컬렉터가 당신이가는 동안 물건을 자유롭게 할 수 있습니다.

사용자 정의 SQL을 더 잘 이해할 수 있으면 관련 테이블을 필드 형식으로 가져 오는 작업을 postgres에서 수행하게 할 수 있습니다.

또한 당신은 전체 데이터 집합을로드 피하기 위해 커서에 표시되어야합니다 http://www.postgresql.org/docs/8.3/static/plpgsql-cursors.html