2010-10-11 53 views
0

我有一個報告生成功能。 導出爲csv或txt。 對於每個月它將是25000記錄每行55列。 每年它將超過300000! 我嘗試添加內存限制,但我不認爲它的好!無論如何現在它的128M。php進程 - 一個接一個 - 模擬線程

我的期望

我將用戶所選擇的時間範圍分成範圍爲25天或30 我將運行25天取的數據,然後寫入CSV。 然後取下25000,寫下。喜歡這個。

我該如何做到這一點?

用於提取正在使用的功能$result= fetchRecords();

對於寫作CSV,我通過這個$結果數組來查看頁面並通過逗號上午印刷循環和分隔條件。

所以控制器將是$template->records=$result;

如果我這樣做在一個for循環

for(){ 
    $result= fetchRecords(); 
    $template->records=$result; 
} 

我不hink這會工作。

如何做到這一點?執行fetch.write然後獲取然後寫入。

你可以請建議更好的方式來實現這個在PHP中保持它在內存限制?

+0

如果是歷史數據,您是否考慮過準備/緩存報告?除非用戶可以要求提供隨機報告,否則不需要一次又一次處理所有行。...... – Wrikken 2010-10-11 01:43:02

+0

它只與歷史數據類似。緩存如何有用? – zod 2010-10-11 02:27:52

+0

如果您只是簡單地從數據庫準備好並寫入CSV,則可能會考慮使用另一種語言。 PHP不是*文本處理的偉大語言。 – meagar 2010-10-13 13:24:39

回答

0

我是從數據庫中獲取大量數據到數組。然後再次循環這個數組寫入CSV或文本。這真的是殺死內存。

現在,我正在從數據庫中獲取數據,在同一個循環中寫入文件。 沒有使用數組。差別很大。

PHP可以更好地導出爲csv或文本。 PHP是一門很棒的語言。

現在我正在下載csv的25 MB。 :)我打破了Excel ..因爲它超過65550記錄。:)

綽綽有餘我。

所以,我們吸取的教訓是 - 不要使用數組來處理這種巨大的數據存儲。