我無法允許用戶從數據庫下載大型報告。使用來自mysql的大量數據
用戶有能力瀏覽網站上的報告,我已經設置了頁面的限制和分頁,所以沒有問題。
但是現在我正在添加功能來一次下載整個報告在一個csv文件。我收到內存錯誤,說我已達到允許的最大內存,並且我沒有在服務器上增加它的權限。有誰知道如何才能做到這一點?到目前爲止,只有獲得700k結果的查詢纔會停止我的腳本。
ps我有搜索周圍的計算器,到目前爲止找不到答案。我使用php和mysql來獲取數據。
在此先感謝
我無法允許用戶從數據庫下載大型報告。使用來自mysql的大量數據
用戶有能力瀏覽網站上的報告,我已經設置了頁面的限制和分頁,所以沒有問題。
但是現在我正在添加功能來一次下載整個報告在一個csv文件。我收到內存錯誤,說我已達到允許的最大內存,並且我沒有在服務器上增加它的權限。有誰知道如何才能做到這一點?到目前爲止,只有獲得700k結果的查詢纔會停止我的腳本。
ps我有搜索周圍的計算器,到目前爲止找不到答案。我使用php和mysql來獲取數據。
在此先感謝
就像@symbcbean所說的那樣,創建文件並在每個查詢偏移處附加數據的過程非常緩慢。所以我想出了一個替代方案,我認爲我應該分享以防別人面臨同樣的問題。
我已經設置了一個cronjob,它會在晚上創建包含所有必要數據的文件的過程,因爲數據每週只能更改幾次。所以現在我已經清除了每次有人需要訪問它時生成一個新的csv的開銷,相反,我只是重定向到預製的文件,工作就完成了!
謝謝@Gaurav & @symbcbean!
不要在一個請求導出全部數據。
在從數據庫導出數據時應用一些限制和偏移量。
像:
按我的評論Guarav的回答,您可以一次只能從數據庫中獲取大量數據 - 無論您以後如何操作它都有多聰明。
必須要麼
我如何可以重定向?如果我已經發送
這是微不足道的 - 如果您在理解如何做到這一點時遇到問題,那麼您已經大大超出了您的深度。
可以將數據添加到一堆記錄的文件 喜歡的東西: 獲得第10000記錄從MySQL 寫第10000記錄到文件 獲取每秒鐘10000個記錄 寫第二個10000記錄到文件 然後箱子鏈接,發送給用戶。
我該如何重定向?如果我已經發送了頭文件下載,它需要全部在一個文件中。 – Ibu 2011-05-03 07:47:48
你的腳本必須在url上工作。我的意思是如果我點擊某個鏈接,它應該導出數據。最初的10000條記錄。然後再將標題設置爲與上一個鏈接相同的網址。但現在抵消將有所不同。如果所有記錄都已導出,請下載所需的文件。 – Gaurav 2011-05-03 09:12:37
這看起來可以暫時解決問題,但這種方法不會改變MySQL返回的結果集的大小(並且在執行查詢時映射到PHP內存空間中 - 檢索單個行的函數/方法在本地副本 - 他們不回去DBMS) – symcbean 2011-05-03 10:24:47