Программное обновление ресурсов (7000+)
Добрый вечер, коллеги, такая ситуация.
Имеется интернет-магазин. Каждые полчаса происходит импорт остатков товаров на сайте (из файла csv).
Ищу ресурсы по TV-полю артикул, и уже дальше из csv Файла обновляю цену и остатки в магазине. На данный момент делаю это с помощью API modx через
На данный момент скрипт порой может работать до 10 минут, что меня очень сильно напрягает по потреблению ресурсов.
Имеется интернет-магазин. Каждые полчаса происходит импорт остатков товаров на сайте (из файла csv).
Ищу ресурсы по TV-полю артикул, и уже дальше из csv Файла обновляю цену и остатки в магазине. На данный момент делаю это с помощью API modx через
$modx->getCollection('modResource'), знаю что еще ресурсы можно обновлять через процессоры. Хотелось спросить, какой метод производительнее(меньше жрет ресурсы, быстрее срабатывает): через ручное обновление ($modx->getCollection('modResource') или же через процессоры?На данный момент скрипт порой может работать до 10 минут, что меня очень сильно напрягает по потреблению ресурсов.
Техническая поддержка MODX
Сайт лежит, тормозит или остался без разработчика?
Переезд с MODX 2 на 3, PHP 7 на 8, скорость и безопасность. Поддержка со сроками и ответственностью, а не совет в чате.
Подробнее
Реклама
Комментарии: 8
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
В miniShop2 есть скрипт для автоматизации импорта, подробнее здесь
Что касается самих процессоров, с ними быстрее не получится. Они, помимо getObject() и save() выполняют еще огромное количество функций и проверок.
У вас товары сохраняются все и всегда? Или есть проверка на изменившиеся поля?
Спасибо!
2) Перед сохранением установкой новых значений и сохранением в базу проверять, есть ли изменения. Если не изменилось, ничего не делать.
Это самая очевидная оптимизация. Следующий шаг — начальная выборка значений в виде массивов данных, без getCollection/getIterator. Сравнить все на уровне массивов, затем быстро пройти только по изменившимся товарам.
И, кстати, рекомендую именно проверку на уровне массивов сделать с формированием нового массива, в котором будут изменившиеся значения. На мой взгляд, быстрее этого варианта только чистый SQL. Могу, конечно, ошибаться.