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