Сейчас механизм выборки обновленных данных, в действии "Импорт продуктов из CMS ExtraParts", осуществляется запросом:
"SELECT * FROM `price` WHERE `post_date` >= '{$postDateFrom}' ORDER BY `price`.`id` ASC"
Где в переменной '{$postDateFrom}' используется время последнего запуска действия.
Проблема в том, когда в `price` резко появляется большое количество обновленных данных (например 4.6 миллионов), действие берет в работу большой массив данных (около 12G), процесс обработки которого длится часами (около 5час.), что приводит к тайм-аутов или ошибок в экспортируемых продуктах или других сбоев экспорта данных.
Необходимо дорабатывать механизм выборки обновленных данных:
1. Братья в бробку ограниченное (например указанное в настройках 100 000 строк) количество данных за один запуск действия, обрабатывало этот массив и прекращало работу действия.
При следующем запуске действия, в обработку брать следующее количество обновленных данных и так далее.
2. Если одновременно (параллельно) работают два и более действия экспорта - данные между ними должны делиться, чтобы не обрабатывать каждым из действий одни и те же данные.
Сейчас механизм выборки обновленных данных, в действии "Импорт продуктов из CMS ExtraParts", осуществляется запросом: "SELECT * FROM `price` WHERE `post_date` >= '{$postDateFrom}' ORDER BY `price`.`id` ASC" Где в переменной '{$postDateFrom}' используется время последнего запуска действия. Проблема в том, когда в `price` резко появляется большое количество обновленных данных (например 4.6 миллионов), действие берет в работу большой массив данных (около 12G), процесс обработки которого длится часами (около 5час.), что приводит к тайм-аутов или ошибок в экспортируемых продуктах или других сбоев экспорта данных. Необходимо дорабатывать механизм выборки обновленных данных: 1. Братья в бробку ограниченное (например указанное в настройках 100 000 строк) количество данных за один запуск действия, обрабатывало этот массив и прекращало работу действия. При следующем запуске действия, в обработку брать следующее количество обновленных данных и так далее. 2. Если одновременно (параллельно) работают два и более действия экспорта - данные между ними должны делиться, чтобы не обрабатывать каждым из действий одни и те же данные.
Уточните пожалуйста проблема в том что это все долго работает или в том что дает нагрузку на сервер? Если в том что долго работает, мы можем влить данные паралельно потоков так в 30-40, если в том что грузит сервер то уже другой вопрос.
Олександр Григорович писал/а: Брати в бробку обмежену (наприклад вказану в налаштуваннях 100 000 рядків)
ну и если бить по 100к то Вы никогда не догоните актуальное состояние.
Уточните пожалуйста проблема в том что это все долго работает или в том что дает нагрузку на сервер? Если в том что долго работает, мы можем влить данные паралельно потоков так в 30-40, если в том что грузит сервер то уже другой вопрос.
[quote]
Олександр Григорович писал/а:
Брати в бробку обмежену (наприклад вказану в налаштуваннях 100 000 рядків)
[/quote]
ну и если бить по 100к то Вы никогда не догоните актуальное состояние.
Да, проблема в том что очень долго работает, и чем дольше длится этот процесс, тем выше вероятность сбоя экспорта. Ресурсов сервера хватает, по этому я и предложил экспортировать частями и параллельными действиями
Да, проблема в том что очень долго работает, и чем дольше длится этот процесс, тем выше вероятность сбоя экспорта.
Ресурсов сервера хватает, по этому я и предложил экспортировать частями и параллельными действиями
Александр Григорьевич писал/а: тем выше вероятность сбоя экспорта
да а какие сбои вы наблюдаете сейчас в таких ситуациях?
Чаще всего если экспорт длится сильно долго, то продуктам начинает затирать бренды или создавать новые без бренда (переменная $brandid возвращает пустое значение...) - это создает большие проблемы.
[quote]
Отдел Заботы
OneBox production писал/а:
[quote]
Александр Григорьевич писал/а:
тем выше вероятность сбоя экспорта
[/quote]
да а какие сбои вы наблюдаете сейчас в таких ситуациях?
[/quote]
Чаще всего если экспорт длится сильно долго, то продуктам начинает затирать бренды или создавать новые без бренда (переменная $brandid возвращает пустое значение...) - это создает большие проблемы.
это решение позволит запомнить весь список брендов и искать их из кеша, это так же немного ускорит импорт но не думаю что глобально. Давайте попробуем, выставлю счет
это решение позволит запомнить весь список брендов и искать их из кеша, это так же немного ускорит импорт но не думаю что глобально. Давайте попробуем, выставлю счет
Отдел Заботы OneBox production писал/а: это решение позволит запомнить весь список брендов и искать их из кеша, это так же немного ускорит импорт но не думаю что глобально. Давайте попробуем, выставлю счет
Одного решения брать бренд из Кеша будет недостаточно, я проверял. Полностью отключал в классе метод получения бренда, его обновление - ускоряет но недостаточно.
Лить в несколько потоков получится реализовать ?
[quote]
Отдел Заботы
OneBox production писал/а:
это решение позволит запомнить весь список брендов и искать их из кеша, это так же немного ускорит импорт но не думаю что глобально. Давайте попробуем, выставлю счет
[/quote]
Одного решения брать бренд из Кеша будет недостаточно, я проверял.
Полностью отключал в классе метод получения бренда, его обновление - ускоряет но недостаточно.
Лить в несколько потоков получится реализовать ?
Отдел Заботы OneBox production писал/а: Можем сделать по-другому, я делаю чтобы Ваша загрузка 4 лямов записей работала например час, после Вы оплачиваете по затраченному времени.
Согласен, дольше будем гадать, по ходу дела разберётесь. Делайте, по факту оплачу.
[quote]
Отдел Заботы
OneBox production писал/а:
Можем сделать по-другому, я делаю чтобы Ваша загрузка 4 лямов записей работала например час, после Вы оплачиваете по затраченному времени.
[/quote]
Согласен, дольше будем гадать, по ходу дела разберётесь.
Делайте, по факту оплачу.
Пожалуйста, присоединяйтесь к диалогу. Если вам есть что сказать - пожалуйста, напишите комментарий. Для входа потребуется мобильный телефон и смс-код для идентификации.
Войти и написать комментарий