Я пытаюсь ускорить работу этого PHP-кода. Я запускаю его через браузер на XAMPP, используя Apache и MYSQL.Производительность анализа JSON и загрузка в MYSQL
Моя проблема в том, что я читаю очень большой файл размером 2 ГБ JSON. Я не могу прочитать его за один раз, так как у меня недостаточно памяти, и поэтому я должен прочитать его по строке
Код читает JSON по строкам. Для каждой строки (фрагмент данных JSON) вызывается функция (Function parse_item), которая декодирует строку JSON, а затем открывает базу данных mysql и вставляет выбранные данные из декодированной строки JSON, а затем закрывает базу данных MySQL. Я знаю его вставку в базу данных, которая вызывает проблемы с производительностью, но не уверен, что делать. (Т. Е. Когда я удаляю базу данных и просто эхо декодированный JSON намного быстрее)
Код (сокращенный фрагмент) работает, но очень медленно ...
Может ли кто-нибудь помочь? Я новичок в PHP, поэтому любое объяснение в простых выражениях было бы с благодарностью принято.
Также ......., если я запустил это из командной строки (т.е. загрузил PHP на свой компьютер), будет ли он работать намного быстрее?
Благодаря Джону
//Parse Function
function parse_item($string) {
$data = json_decode($string);
$uid=($data->JsonScheduleV1->CIF_train_uid);
$stp=($data->JsonScheduleV1->CIF_stp_indicator);
$head=($data->JsonScheduleV1->schedule_segment->signalling_id);
$startlocation=($data->JsonScheduleV1->schedule_segment->schedule_location[0]->tiploc_code);
require('connect_db.php');
mysqli_select_db($mysql_link,"timetable");
mysqli_query($mysql_link,"INSERT INTO railstp (uid,stp,head,startlocation)
VALUES ('$uid','$stp','$head','$startlocation')");
mysqli_close($mysql_link);
if (is_null($data)) {
die("Json decoding failed with error: ". json_last_error());
}
}
$file = 'CIF_PA_TOC_FULL_DAILY_toc-full';
// Slices up the JSON into lines and then
parse_item($string);
//
EDIT
У меня есть база данных InnoDB Есть 20 ключей - 2 представляют собой целые числа, 2 финики и текст остальных не уверены, сколько строк, но думает, более 1000 - не удалось запустить его достаточно долго
Вы должны показать структуру своей таблицы. (Если это MyISAM или InnoDB, какие ключи, ...). Сколько у вас линий? С помощью одного вызова скрипта вы разбираете весь файл, вызывая 'parse_item' для каждой строки? –
Добавили EDIT – user2635961
Попробуйте использовать пакетную вставку, возможно, 100 - 1000 записей за раз? http://stackoverflow.com/questions/5526917/how-to-do-a-batch-insert-in-mysql – SamV