@Suxoi

Как ускорить выполнение скрипта?

Всем привет, никогда не сталкивался с выводом больших данных и их парсингом, только начинаю в программировании
Написал скрипт на php
Делаю запрос с выборкой данных из БД, с сохранением в массив(кстати тоже вопрос, если записей в таблице очень много больше 1 млн, правильно ли это?)

Дальше через foreach бегаю по массиву ищу поле и подставляю его в curl() запрос,чтобы спарсить данные, декодирую через json_decode, в этом массиве снова ищу данные foreach и обновляю в БД

Запустил скрипт за 15 мин , перемолол 4000 строк
В БД таких строк 1 620 000
Посчитал чтобы все их обработать займет 72 дня (по 4 сек на один запрос)

Как ускорить этот процесс и уменьшить время?Использовать потоки(А есть ли они в php)? Или использовать array_chunk и раскидывать по серверам?

const CHUNK = 100000;
const SERVER_NUM = 10;
$maxId = $db->fetchVal('SELECT o_id FROM organizations ORDER BY o_id DESC LIMIT 1');
$chunkOrder = 0;
$from = 0;
$to = CHUNK;
$SERVER_ID = 1;
  do{
     $chunkOrder++;
       if ($SERVER_ID !== $chunkOrder % SERVER_NUM){
           continue;
          };
   $org_twitter = $db->fetchAll('SELECT * FROM organizations where o_id >= :from and o_id < :to', ['from'=>$from, 'to'=> $to]);
   $from = $to;
   $to += CHUNK;
   foreach (){}
  }while($from <= $maxId)
  • Вопрос задан
  • 393 просмотра
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
Я думаю, что скрипт работает быстро, медленно работает CURL и возможно парсер, а это уже вопрос зависящий от Вашего кода и скорости работы второго сайта. А Вы о них забыли рассказать.
Думаю стоить вставить в код чекпоинты и выводить время, что бы понять где именно узкое место, потом выложить его код и попросить помочь с оптимизацией.
Ответ написан
@AmadeyMinisol
full stack web-developer
nohup + порции на каждый инстанс скрипт в помощь
про nohup можно почитать тут: https://ru.wikipedia.org/wiki/Nohup

логика такая, будет два скрипта:
1) управляющий - создает инстанс скрипта, который должен получить выборку из бд и сделать запросы
2) скрипт, которые собственно делает выборку из бд и делает соответствующие запросы

ну я бы сделал например так
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы