我一直在使用Laravel 5的Web應用程序。它在本地主機(xampp)上運行在Windows 8.1 PC上。 4GB RAM,2,67GHz處理器,非常簡單。優化數據庫查詢 - 縮放大數據 - Laravel 5
我查詢大部分的時間表包含很多行(10.000給予或採取) - 這麼多,寫,做了路線:
return User::all();
運行此只返回一個白色的屏幕。 Chrome控制檯有時會列出500(內部服務器錯誤)。
顯示查詢前發出的回聲或打印,但之後沒有執行任何回聲或打印。查詢另一個模型(其表只有2行)會正確返回數據。
這導致我得出結論,我的服務器不能很好地擴展這個數據量。我試圖通過這樣做來解決這個問題。
User::all()->chunk(200, function($chunkOfTickets){ /*some code*/});
我希望將數據拆分成塊,以便在服務器上更容易。然而,這不起作用,因爲Eloquent首先獲取所有數據(因爲它無法處理而破壞),然後纔將其分成塊。
感謝您的閱讀。
編輯:只是測試了一遍又一遍,請求越來越大的數據量。該限制大約爲26000行(返回27000和內存不足錯誤)。
正如評論中所述,php日誌聲明瞭這一點。顯然,我要求這麼多的內存就Laravel墜毀前可能會顯示錯誤消息
[01-Jul-2015 17:27:51 UTC] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 8376445 bytes) in C:\xampp\htdocs\gamescaffold\vendor\laravel\framework\src\Illuminate\Support\Collection.php on line 791
額外的編輯
有沒有一種方法,我可以按塊劃分從DB的回答嗎?像:
User::chunk(200)->all(); /*which obviously does not work*/
如果我寫的數據庫直接通過phpmyadmin它返回在0.0045秒37035行看似複雜的查詢。 (我懷疑這裏有一些通過xampp或者其他的東西進行優化)
當您收到500內部服務器錯誤時,php錯誤日誌會顯示什麼內容?還有10K行不是「那個」,也不是那個「大」的數據 –
感謝我指出了php錯誤日誌,我忘記了那些(我只是檢查了Laravel自己的日誌是空的)。這些條目說''[01-Jul-2015 14:49:54 UTC] PHP致命錯誤:允許的內存大小134217728字節用盡(試圖分配39個字節)在C:\ xampp \ htdocs \ gamescaffold \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Connection.php在第296行' – Thaenor
那裏你有它,10K記錄佔用了128MB的php進程允許的內存,這取決於你的業務邏輯增加這個或者優化你獲取數據,你真的需要抓住所有的10K並顯示它們嗎? –