Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Помогите оптимизировать запрос


 Поделиться

Рекомендованные сообщения

Доброе %время_суток%!
Занимаюсь разработкой php модуля. Нужно сделать скрипт который с помощью SOAP клиента и API вытаскивает данные от товарах, а затем поместить их в БД магазина. Проблема в том, что написанный мной скрипт не может уложиться во времени, так как затрачивает слишком много ресурсов сервера и выдает ошибки 502 или просто обрывается.
Судя по всему хостинг просто сбрасывает его. Было решено импортировать данные по таблицам, а потом склеить это в несколько .sql пакетов для импортирования через phpMyAdmin. По сути размер одной таблицы не так уж велик - около 8-10мб. Вот код скрипта. Как можно это реализовать? Проблема номер 2 это то, что есть еще более жирные таблицы.
Делаю обыкновенный bulk insert. И вывод на экран. Доходит где-то до 7-8мб и прерывается не завешившись до конца. Можно ли как-то оптимизировать скрипт?

Код:

$client = new SoapClient($wsdl_url, $params);
$category = $client->getCatalog(ALL);

echo "INSERT INTO `oc_product` (`product_id`, `model`, `sku`, `upc`, `ean`, `jan`, `isbn`, `mpn`, `location`, `quantity`, `stock_status_id`, `image`, `manufacturer_id`, `shipping`, `price`, `points`, `tax_class_id`, `date_available`, `weight`, `weight_class_id`, `length`, `width`, `height`, `length_class_id`, `subtract`, `minimum`, `sort_order`, `status`, `date_added`, `date_modified`, `viewed`) VALUES"."<br>";

foreach ($category as $row) {

    if ($row->ID == D1 OR $row->ID == E1 OR $row->ID == L1 OR $row->ID == P1 OR $row->ID == Y1) {
        continue;
    }
    else {
       $cat = $client->getItems($row->ID);
       foreach ($cat as $row) {
          echo "('". $row->No ."', '', '', '', '', '', '', '', '', 1, 7, NULL, 2, 1, '1.0000', 0, 9, '0000-00-00', '". $row->Weight ."', 0, '0.00000000', '0.00000000', '0.00000000', 1, 1, 1, 0, 1, 'NOW()', 'NOW()', 0),"."<br>";
       }
    }
}
echo ';';
Ссылка на комментарий
Поделиться на других сайтах


Моё мнение - нужно разбить на две части. 

Первая будет отвечать за получение данных от сайта и например сохранять их в файл, вторая будет заносить данные из файла в базу.

При больших объёмах информации работает отлично. 

 

Напишите мне в скайп, возможно быстрее помогу

Ссылка на комментарий
Поделиться на других сайтах

На самом деле автор вопроса уже сам практически разобрался.

Проблемным местом было

$category = $client->getCatalog(ALL);

Ждём завтра от него новостей и результатов

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.