CSV импорт товаров и его скорость работы.

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

Vitaly
Аватара
Vitaly
Репутация: 20
Сообщения: 109
Зарегистрирован: 15.08.2016
С нами: 7 лет 8 месяцев

Сообщение #1 Vitaly » 18.08.2016, 17:28

Здравствуйте! Продолжаю знакомиться с OkayCMS и решил опробовать функцию импорта товаров.
Но моя задача немного отличалась от обычного импорта, нужно было обновить цены по артикулу, по сути три столбца в файле - артикул, цена, старя цена.
В файле у меня почти 20 тыс строк, в базе как я знаю есть только одно совпадение по артикулу.
Убрав лишние columns_names из файла import.php я загрузил файл. Процесс как бы пошел, но скорость с которой это дело работает мягко говоря низкая. 1% = 15 сек.
Возник вопрос, встроенный импорт действительно работает с такой низкой скоростью? Или это я неправильно что-то делаю.

Добавлено спустя 2 часа 48 минут:
Почему собственно я задал этот вопрос.
Есть рабочий магазин на joomshopping, тамошний бесплатный, дефолтный csv импорт справляется с этой задачей за 5 - 6 сек. Разница колоссальная.

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 2 месяца
Откуда: Днепр

Сообщение #2 zyxer » 19.08.2016, 06:38

Как вариант попробуйте в backend/ajax/import.php ~ 36 строке изменить private $products_count = 10; поставить не 10, а 100 например. Интересно быстрее заработает..?
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

Vitaly
Аватара
Vitaly
Репутация: 20
Сообщения: 109
Зарегистрирован: 15.08.2016
С нами: 7 лет 8 месяцев

Сообщение #3 Vitaly » 19.08.2016, 09:31

Да, вы правы. Я как-то не сообразил увеличить длину самого запроса. Так процесс идет быстрее, 1% ≈ 2сек. Уже легче.

korshunov
korshunov
Репутация: 148
Сообщения: 1859
Зарегистрирован: 03.12.2015
С нами: 8 лет 4 месяца
Skype

Сообщение #4 korshunov » 19.08.2016, 10:03

Пожелание для разработчиков:

По хорошему этот параметр надо бы совсем убрать, а определять момент окончания в зависимости от уже прошедшего времени работы скрипта. Тем более, что это совсем не сложно. И пример кода для этого найти легче легкого - в скрипте обмена с 1С...

toxxxa M
Аватара
toxxxa M
Репутация: 4
Сообщения: 14
Зарегистрирован: 24.05.2016
С нами: 7 лет 10 месяцев
Откуда: Донецк украинский
Сайт

Сообщение #5 toxxxa » 22.12.2016, 21:52

Скорость такая дохлая, потому что на импортирование каждого товара идёт минимум два запроса к БД (SELECT и UPDATE), а если в импортируемом файле указан бренд, категория или картинка - намного больше. В общем случае так конечно проще, но когда нужно просто обновить цены - это расточительно. Еще одна проблема - в импортируемом файле могут быть лишние товары, которых нет на сайте. Но из-за обязательного поля "название товара" стандартный импорт будет пытаться создать эти товары вместо того, чтоб их просто пропустить.

Я сейчас сяду писать свой метод для обновления цен:

1. Парсим первые 500 товаров, запоминаем их SKU

2. Узнаем у БД id этих товаров

Код: Выделить всё

SELECT `id`, `sku` FROM `s_variants` WHERE `sku` IN (список SKU через запятую)


3. Формируем запрос на обновление цен

Код: Выделить всё

INSERT INTO `s_variants` (`id`, `price`) VALUES
(..,..),
(..,..),
(..,..),
ON DUPLICATE KEY UPDATE `price` = VALUES(`price`)


Ну, это в общем виде. Зато 20 000 товаров = 80 запросов к БД и к памяти запросы минимальные.
И полезно тем, у кого магазин на шаред-хостингах, у которых обычно лимит на 3-5 тыс обращений к БД в час.
Онлайн-калькуляторы для типографий и РА: http://calc.in.ua


Название раздела: Вопросы по работе с OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Вопросы по работе с OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 20 гостей