Итак, у меня есть база данных с большими данными. Данные для использования в настоящее время составляют около 2,6 ГБ.PHP File Writing (fwrite/file_put_contents) скорость/оптимизация
Все данные должны быть записаны в текстовый файл для последующего использования в других сценариях.
Данные ограничены в файле и разбиваются на несколько частей. 100 результатов на файл (около 37 Мбайт каждого файла). Это около 71 файла.
Данные представляют собой данные json, которые сериализуются и затем зашифровываются с помощью openssl.
Данные записываются в файлы до тех пор, пока не будет достигнуто максимальное время выполнения через 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);
}
РАБОЧИЙ КОД ПОСЛЕ HELP
$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. Но im фактически не уверен, действительно ли это проблема, если я не сериализую ее. Мог бы попробовать. Спасибо за предложение –