作者ernieyang09 (亂入)
看板PHP
標題[請益] php取DB(XX萬筆)到excel
時間Tue Nov 26 23:23:08 2013
大家好 最近遇到這個問題
我之前是使用phpexcel寫的 然後是在demo做測試用
那時候沒考慮到筆數問題 結果移植到實體上面就爆炸了
原因想當然爾是memory不足
我已經爬過關於phpexcel&php memory的問題
公司只願意開128MB給一個user 似乎是很難解
請問各位有解嗎(環境為php5.2.x 非5.3)
試過pear但是會有utf8問題 其他的套件就很難找了 能google的八成都是phpexcel
用了他一個本身的cache_to_sqlite
memory使用變成1/4 但是只寫到3xmb還是死當跳出空白(那就跟原本120m差不多)
放寬條件的話頂多記憶體開開看512G 但是要寫入最少25w筆資料(現在才五萬多筆)
又如果無解 該如何告知公司上層比較好
我已經跟他們說過蠻多次關於memory的問題
但是由於我是剛入公司也是社會新鮮人 他們好像覺得這個都很容易解決
然後拿C&C++的概念跟我說應該很好處理
(公司寫php的都沒用過php寫大量資料 都只是用來做網頁呈現 最大的幾個上司是底層的)
邏輯我很早就寫好了 最近就被這搞了四五天 快發瘋了
--
喜歡花的人, ╱ 愛花的人,
會把花摘走。 ╱ 會幫花澆水。
● ﹡ ╱ ∴∵∴∵ ○
φkcetair ■╯ ╱ * *** * * ** **∴∵∴∕□
ˇˇˇˇˇˇ ˇˇ ╯﹨ ╱ ˇ ˇˇˇ ˇ ˇ ˇˇ ˇˇ └▆ ∥
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.37.117.82
1F:推 dinos:一行一行吐csv? 11/27 00:12
2F:→ kosjason:是吐出CSV檔? 不能分割成多檔嗎? 說真的25w筆在同一個 11/27 00:18
3F:→ kosjason:sheet 你電腦要打開 也要讀一陣子吧 11/27 00:18
4F:→ danny8376:看這邊應該是吐xls 不過用C寫也會用掉超過128M記憶體吧 11/27 00:25
5F:→ kosjason:2003 xls上限不是65536嗎? 2007 xlsx才有辦法同sheet吧? 11/27 00:29
6F:→ ernieyang09:是xls or xlsx N worksheet 每個sheet col皆不同 11/27 00:34
7F:推 danny8376:總之PHPExcel記憶體就是吃很兇 11/27 00:44
8F:→ danny8376:PEAR的Spreadsheet_Excel_Writer才有辦法 11/27 00:44
9F:→ danny8376:至於UTF-8問題 找一下就有解了 11/27 00:44
10F:推 alog:如果你不是應徵設計網站的,可以離開了 11/27 05:19
11F:推 alog:不過環境也該升上去了吧,現在都5.4 5.5了 11/27 05:25
12F:推 alog:純匯出可以用C or C#輸出好檔案 在伺服端的目錄 11/27 05:29
13F:→ alog:php則是排程匯出指令跟控管檔案的輸出 11/27 05:30
14F:推 alog:php本身設計不適合 這種需要長時間值行的工作 11/27 05:31
15F:推 alog:忘記說,不見得需要C之類的,Python做做看也行 11/27 05:34
16F:→ wildgoat:set_time_limit ? 11/30 09:41
17F:推 pigwolf:用jQuery+PHP一次送500筆試試,還可看到即時回應 12/01 14:13
18F:→ dlikeayu:先count筆數,再設個一次取的最大值,取資料用offset 12/02 02:30
19F:→ dlikeayu:來取一個range,以上再用while迴圈去跑,取出的model每次 12/02 02:31
20F:→ dlikeayu:結束再unset掉,一直加回同一個變數裏去render你的row 12/02 02:31