我是新來處理大量的數據。我想知道在批量查詢數據庫時是否有任何最佳做法,或者是否有人可以提供任何建議。PHP MySQL批量運行查詢
我有一個查詢,將拉出所有的數據和PHP用於寫入數據到XML文件。可以有10到50萬行數據的任何地方,因此我可以通過腳本來獲取50批次的數據,寫入文件,然後獲得下50行,將其附加到文件等等。或者我應該做其他事情?我可以增加批量大小,還是應該減小它以使腳本運行得更快?
任何意見將不勝感激。
我是新來處理大量的數據。我想知道在批量查詢數據庫時是否有任何最佳做法,或者是否有人可以提供任何建議。PHP MySQL批量運行查詢
我有一個查詢,將拉出所有的數據和PHP用於寫入數據到XML文件。可以有10到50萬行數據的任何地方,因此我可以通過腳本來獲取50批次的數據,寫入文件,然後獲得下50行,將其附加到文件等等。或者我應該做其他事情?我可以增加批量大小,還是應該減小它以使腳本運行得更快?
任何意見將不勝感激。
是的,對於巨大的結果,建議使用批處理(性能和內存原因)。
Here is benchmark and example code of running query in batches
要做到這一點,最好的辦法依賴於幾個不同的事情。最重要的是你何時以及爲什麼要創建這個XML文件。
如果您按需創建XML文件,並且用戶正在等待該文件,那麼您需要對性能進行一些微調和測試。
如果是定期創建的東西,也許是每晚或每小時的任務,然後在構建XML文件後(如RSS提要生成器)請求XML文件,那麼如果你有什麼工作,我會建議不要搞亂用它。
就性能而言,有不同的事情可以提供幫助。將一些簡單的計時器放入腳本中,並使用每批記錄的數量來查看是否存在性能差異。
$start = microtime(true);
//process batch
$end = microtime(true);
$runTimeMilliseconds = $end - $start;
如果問題是用戶反饋,您可以考慮使用AJAX啓動每批並向用戶報告進度。如果您向用戶提供反饋,他們通常會很樂意等待更長時間,而不是等待整個頁面刷新。
此外,請檢查您的SQL查詢以確保沒有隱藏的性能處罰。 EXPLAIN可以向你展示MySQL如何處理你的查詢。
在極端情況下,我想通過並行處理可以實現最佳性能。我沒有在PHP中使用它,但這裏的主要參考http://www.php.net/manual/en/refs.fileprocess.process.php
根據您的託管環境,您可以找到記錄的總數並將其分成子流程。每個構建自己的XML片段。然後你可以合併碎片。所以進程1可以處理記錄爲0〜99,過程2 100 199等
你會驚訝一個簡單的選擇都無極限是最快的,
因爲它只能查詢一次數據庫,
一切是本地處理
$sql = select all_columns from table;
<?php
// set a very high memory
// query without limit, if can avoid sorting is the best
// iterate mysql result, and set it to an array
// $results[] = $row
// free mysql_result
// write xml for every one thousand
// because building xml is consuming MOST memory
for ($i=0; $i<$len; ++$i)
{
$arr = $results[$i];
// do any xml preparation
// dun forget file-write is expensive too
if ($i%1000 == 0 && $i > 0)
{
// write to file
}
}
?>
最好的方法是將它安排爲CRON作業,我認爲這是用於PHP批處理的最佳解決方案。檢查此鏈接的更多信息! Batch Processing in PHP。希望這可以幫助。
您可以使用'mysqldump --xml'轉儲您的數據庫 – Oroboros102