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