Кто как решает задачу выполнения огромных скриптов?

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
Ghost_nsk
Сообщения: 825
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск
Контактная информация:

Кто как решает задачу выполнения огромных скриптов?

Сообщение Ghost_nsk »

день добрый
есть онлайн-магазин, люди подгружают на обновление прайс с количеством записей например >10K, по каждой записи >10 столбцов инфы
посоветуйте настройки или нестандартное решение задачи, чтобы сервак не подвисал :)
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Кто как решает задачу выполнения огромных скриптов?

Сообщение samdark »

Поставить в очередь, выполнять в фоне мелкими порциями.
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Кто как решает задачу выполнения огромных скриптов?

Сообщение lancecoder »

да, я тоже как то делал импортер с больших файлов, так вот проще его разбить сначала на маленькие выгрузить из памяти большой и маленькими порциями обрабатывать, в итоге много памяти вы займете всего 1 раз(на время разбивки), а не на весь период обработки (импорта)
Аватара пользователя
Ghost_nsk
Сообщения: 825
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск
Контактная информация:

Re: Кто как решает задачу выполнения огромных скриптов?

Сообщение Ghost_nsk »

а пример можно, например имеем файл 15 тыщ позиций, процедура какая:
1) сохраняем файл на серваке
2) разбиваем файл на маленькие файлы по 1000 позиций
3) обращаемся к этим файлам, запускаем скрипт обработки
типа такого?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Кто как решает задачу выполнения огромных скриптов?

Сообщение samdark »

1) сохраняем файл на серваке сразу
2) по крону бьём на части в фоне
3) по другому крону обрабатываем то, что уже разбито
Аватара пользователя
Ghost_nsk
Сообщения: 825
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск
Контактная информация:

Re: Кто как решает задачу выполнения огромных скриптов?

Сообщение Ghost_nsk »

Sam Dark писал(а):1) сохраняем файл на серваке сразу
2) по крону бьём на части в фоне
3) по другому крону обрабатываем то, что уже разбито
круто спасибо) будем пробовать
Аватара пользователя
Koduc
Сообщения: 140
Зарегистрирован: 2011.02.15, 18:56

Re: Кто как решает задачу выполнения огромных скриптов?

Сообщение Koduc »

Можно без крона - иногда делаю форму, которая автосабмитится.
На форме есть, например, счетчик, который указывает, какие записи обрабатывать.
Сабмитится форма, идет обработка порции данных, выдается новая форма с новым диапазоном для обработки, снова автоматически сабмитится и так далее (можно и через ajax). Но это придется заставить пользователя висеть на странице, пока идет обратока. Но в качестве плюшки - легко вешается прогресс-бар, показывающий процесс обработки.
Разработка на Yii: monoray.ru
Открытое бесплатное решение для создания сайтов по аренде/продаже недвижимости: Open Real Estate
shrekki
Сообщения: 40
Зарегистрирован: 2011.12.24, 13:21
Откуда: питер

Re: Кто как решает задачу выполнения огромных скриптов?

Сообщение shrekki »

Эм.
У меня обновляется сайт каждые 15 минут.
30К изделий. Обновление через 8 файлов. Один из которых как раз таки с 30К изделиями.

Время выполнения от 30-65 секунд через ConsoleCommand. памяти кушает 45 метров. Обновление по 5 таблицам + связи.
Все работает отлично, сбоев нет.

Поясню.
Скачивается архив с сервака по FTP, потом распаковывается, выбираются нужные файлы и далее парсятся.
Так же потом через другую ConsoleCommand, проверяется наличие фотографий к изделиям, и если их нет то скачиваются с сервака по ftp и уменьшаются до нужных размеров, их 3 размера.

В общей сложности работают 4ре скрипта через консоль. по сумме времени работы занимают примерно от 2-3 минут. бывает быстрее, бывает медленнее, но не более 4 минут на все.

ps скрипты не огромные, но работают с большими объемами данных.
Ответить