1b.app
Скопирована ссылка -

Оцените доработку действия

Сейчас механизм выборки обновленных данных, в действии "Импорт продуктов из CMS ExtraParts", осуществляется запросом:
"SELECT * FROM `price` WHERE `post_date` >= '{$postDateFrom}' ORDER BY `price`.`id` ASC"
Где в переменной '{$postDateFrom}' используется время последнего запуска действия.
Проблема в том, когда в `price` резко появляется большое количество обновленных данных (например 4.6 миллионов), действие берет в работу большой массив данных (около 12G), процесс обработки которого длится часами (около 5час.), что приводит к тайм-аутов или ошибок в экспортируемых продуктах или других сбоев экспорта данных.
Необходимо дорабатывать механизм выборки обновленных данных:
1. Братья в бробку ограниченное (например указанное в настройках 100 000 строк) количество данных за один запуск действия, обрабатывало этот массив и прекращало работу действия.
При следующем запуске действия, в обработку брать следующее количество обновленных данных и так далее.
2. Если одновременно (параллельно) работают два и более действия экспорта - данные между ними должны делиться, чтобы не обрабатывать каждым из действий одни и те же данные.
Оригинальный вопрос доступен на версии: ua

Ответы:

Уточните пожалуйста проблема в том что это все долго работает или в том что дает нагрузку на сервер? Если в том что долго работает, мы можем влить данные паралельно потоков так в 30-40, если в том что грузит сервер то уже другой вопрос.


Олександр Григорович писал/а:
Брати в бробку обмежену (наприклад вказану в налаштуваннях 100 000 рядків)

ну и если бить по 100к то Вы никогда не догоните актуальное состояние.
22.04.2024, 13:28

Возможно так же можно ускорить загрузку товаров, чтобы это было в Х раз быстрее на таком к-ве
22.04.2024, 13:29

Да, проблема в том что очень долго работает, и чем дольше длится этот процесс, тем выше вероятность сбоя экспорта.
Ресурсов сервера хватает, по этому я и предложил экспортировать частями и параллельными действиями
22.04.2024, 13:56


Александр Григорьевич писал/а:
тем выше вероятность сбоя экспорта

да а какие сбои вы наблюдаете сейчас в таких ситуациях?
22.04.2024, 13:58
Оригинальный комментарий доступен на версии: ua


Отдел Заботы
OneBox production писал/а:

Александр Григорьевич писал/а:
тем выше вероятность сбоя экспорта

да а какие сбои вы наблюдаете сейчас в таких ситуациях?

Чаще всего если экспорт длится сильно долго, то продуктам начинает затирать бренды или создавать новые без бренда (переменная $brandid возвращает пустое значение...) - это создает большие проблемы.
22.04.2024, 14:11

если проблема только в этом, то это фикситься за 1ч доработки.
22.04.2024, 14:26

Если есть решение как ускорить экспорт, что позволит успешно заливать такое количество и при этом избавиться от потери бренда, то выставляйте счет.
22.04.2024, 14:34

это решение позволит запомнить весь список брендов и искать их из кеша, это так же немного ускорит импорт но не думаю что глобально. Давайте попробуем, выставлю счет
22.04.2024, 15:30


Отдел Заботы
OneBox production писал/а:
это решение позволит запомнить весь список брендов и искать их из кеша, это так же немного ускорит импорт но не думаю что глобально. Давайте попробуем, выставлю счет

Одного решения брать бренд из Кеша будет недостаточно, я проверял.
Полностью отключал в классе метод получения бренда, его обновление - ускоряет но недостаточно.

Лить в несколько потоков получится реализовать ?
22.04.2024, 16:08

Плевать на скорость, если по итогу все зальет нормально. Если лить в несколько потоков мы можем сильно нагрузить внешнюю базу и свою.
22.04.2024, 16:32

Можем сделать по-другому, я делаю чтобы Ваша загрузка 4 лямов записей работала например час, после Вы оплачиваете по затраченному времени.
22.04.2024, 16:33


Отдел Заботы
OneBox production писал/а:
Можем сделать по-другому, я делаю чтобы Ваша загрузка 4 лямов записей работала например час, после Вы оплачиваете по затраченному времени.

Согласен, дольше будем гадать, по ходу дела разберётесь.
Делайте, по факту оплачу.
22.04.2024, 16:38


Отдел Заботы
OneBox production писал/а:
Можем сделать по-другому, я делаю чтобы Ваша загрузка 4 лямов записей работала например час, после Вы оплачиваете по затраченному времени.

Добрый день.
Есть какие то продвижения по заданию?
09.05.2024, 13:44

Добрый день. Я откатил все Ваши изменения и добавил их в виде настроек + свои оптимизации зашил туда же и включил их сразу. При первых тестах список из 1к товаров загружался около 6 сек, в данный момент около 2-3 (с учетом импорта категорий, который всегда съедает около секунды на старте действия).
Список из 100к записей загружается около 130-150 сек, т.е. указанные 4 миллионов записей прилетят примерно за полтора-два часа. Т.е. действие стало работать в несколько раз быстрее.
В данный момент потрачено 3ч, если хотите то можем продолжить и сделать выгрузку 100к записей примерно за минуту (т.е. еще в 2 раза быстрее, я думаю это возможно), но там уже будет сложней так как базовые оптимизации я выполнил, дальше уже придется анализировать запросы и каждая секунда будет даваться немного сложнее.
23.05.2024, 16:36

Олександр Григорович
Support EP
Оставьте сообщение в этой теме и вам откроются контакты пользователя
Добрый день. Пока делал отчет по результатам доработки, несколько раз выкл./вкл. действие импорта и все действительно заработало, 3 112 663 записей за 97 мин. - отличный показатель.
Спасибо Дмитрий! Жду счет.

Но есть и проблемы:
- во время импорта почему то некоторым продуктам переписывает значение unsyncable с 0 на 1 - это влияет на дальнейший импорт в BOX или экспорт в OpenCart?
- текущее действие импортируя производителей, записывает их cat.id (ExtraParts) в поле shopbrand.code1c (BOX), это приводит к конфликту экспорта в опенкарт, описаном в https://1b.app/ru/forum/integrations-with-online-stores/18246-konflikt-u-roboti-... - это обязательно делать?
или как еще можно решить конфликт?
25.05.2024, 17:56


Олександр Григорович писал/а:
- під час імпорту чомусь деяким продуктам переписує значення unsyncable з 0 на 1 - це впливає на подальший імпорт у BOX чи експорт в OpenCart?

1. Такое может быть если в процессе обновления произошла какая то ошибка. Попробуйте сохранить товар ручками, все ли окей с ним?
2. Вы что то путаете, вероятно это делает действие которое импортирует бренды (отдельное). Вы можете его выключить если этого делать не нужно
27.05.2024, 10:52

Пожалуйста, присоединяйтесь к диалогу. Если вам есть что сказать - пожалуйста, напишите комментарий. Для входа потребуется мобильный телефон и смс-код для идентификации. Войти и написать комментарий