Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

Доброе %время_суток%!
Занимаюсь разработкой 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 weeks later...

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.