所以,我有一個數據庫與大數據。目前使用的數據大約爲2,6 GB。PHP文件寫入(fwrite/file_put_contents)速度/優化
所有數據需要被寫入到在其他腳本日後使用文本文件。
數據被限制爲每個文件並分成多個部分。每個文件100個結果(每個文件大約37MB)。那大約有71個文件。
該數據是正在被序列化,然後用openssl加密的json數據。
的數據被正確地寫入到文件,直到240秒後達到最大執行時間。這是後約20個文件...
好,我就可以延長該時間,但沒有那這個問題。
的問題如下:
Writing file 1-6: +/- 5 seconds
Writing file 7-8: +/- 7 seconds
Writing file 9-11: +/- 12 seconds
Writing file 12-14: +/- 17 seconds
Writing file 14-16: +/- 20 seconds
Writing file 16-18: +/- 23 seconds
Writing file 19-20: +/- 27 seconds
Note: time is needed time per file
換句話說,與每一個文件我寫,每個文件的書寫時間的推移顯著了,是什麼原因導致的腳本是緩慢offcourse。
劇本的結構有點像這樣:
$needed_files = count needed files/parts
for ($part=1; $part<=$needed_files; $part++) { // Loop throught parts
$query > mysqli select data
$data > json_encode > serialize > openssl_encrypyt
file_put_contents($filename.$part, $data, LOCK_EX);
}
工作代碼幫助後
$notchDetails = mysqli_query($conn, "SELECT * FROM notches WHERE projectid = ".$projectid."");
$rec_count = 0;
$limit = 100;
$part = 1;
while ($notch = mysqli_fetch_assoc($notchDetails)) {
$data1[] = $notch;
$rec_count++;
if ($rec_count >= $limit) {
$data = json_encode($data1);
$data = openssl_encrypt(bin2hex($data), "aes128", $pass, false, $iv);
$filename = $mainfolder."/".$projectfolder."/".$subfolder."/".$fname.".part".$part."".$fext;
file_put_contents($filename, $data, LOCK_EX);
$part++;
$rec_count = 0;
$data = $data1 = "";
}
}
if ($data1 != "") {
$data = json_encode($data1);
$data = openssl_encrypt(bin2hex($data), "aes128", $pass, false, $iv);
$filename = $mainfolder."/".$projectfolder."/".$subfolder."/".$fname.".part".$part."".$fext;
file_put_contents($filename, $data, LOCK_EX);
}
mysqli_free_result($notchDetails);
我會從http://php.net/manual/en/mysqli-result.free.php開始 – Here2Help
是不是json_encode序列化的一種方式?什麼是額外的「序列化」步驟? (不要認爲這是瓶頸,只是想知道) –
因爲需要合併多個json字符串和非json字符串。但即時通訊實際上不確定如果它真的是一個問題,如果我不序列化它。可以試試。感謝您的建議 –