Объемные вычисления на стороне сервера

flashback

Новичок
Объемные вычисления на стороне сервера

(Apache 2.2.4 PHP 5.2.1)
Доброго времени суток!

Помогите пожалуйста в решении задачи:
- есть скрипт который выполняет объемный поиск по БД, время работы скрипта может достигать до часа
- есть HTML страница, которая содержит строку поиска и его параметры

В НАСТОЯЩЕЕ ВРЕМЯ:
- скрипт выполняет все операции, но до таймаута сервера, т.е. пока броузер получает от сервера данные, т.е. приблизительно 5 - 10 сек.


НУЖНО:
- полностью выполнить скрипт (без таймаут обрыва, т.е. чтобы он работал на сервере хоть час хоть полтора), а когда он получит результаты (все), то на HTML страницу со строкой запроса вывести результаты
- при этом разбиение работы скрипта на этапы (постраничные запросы) как в Google не подходит, нужно все и сразу.
- и если возможно, то не менять параметр ПХП по времени выполнения скрипта (я даже не знаю какой предел ставить)

Извините если задача тривиальная, но я с ней столкнулся впервые. ответов в форуме я не нашел.

очень буду признателен за помощь
 

gonza

Новичок
а. время исполнения sql запросов не учитывается при подсчете времени исполнения скрипта.
b. сделай поиск по форуму и посмотри как он работает. Время рефреша думаю сам подберешь.
c. ты уверен что идешь тем путем?
 

WP

^_^
Почему ужас? Может у него такая специфика. Хотя думаю скорее всего можно сократить время поиска до долей секунды, если с прямыми руками подходить к делу.
Но решается эта задачка вот как, сначала делаешь уникальный ID поиска в БД и обращаешься к скрипту как к картинке например, а в скрипте set_time_limit(0); ignore_user_abort(1); и когда скрипт заканчивает работу вносишь в БД по тому ID результаты. А основную страничку рефрешишь каждую минуту например, и смотришь нет ли в БД новой инфы.
 

flashback

Новичок
Дело в том, что с БД это полдела, основную долю времени отбирает еще и поиск в файлах, их количество более 10.000.
как в такой ситуации быть?
Рефреш на странице ставить и выдавать промежуточные результаты?
И я так и не понял вас, если скрипт долго очень должен выполнятся, то если броузер не получает от него результат (т.е. соединение уже оборвано по таймауту) скрипт дойдет до конца, или он обрывает свою работу?
Та же проблема состоит и с перегонкой базы данных из Access в MySQL. База весит 700Мб, скрипт должен из одного формата в дуругой перегнать. Он должен дойти до конца или нет (или оборвется по таймауту)? И если оборвется то как решить ЭТУ проблему.


Спасибо всем большое за помощь, заранее!
С уважением Александр.

-~{}~ 20.04.07 23:48:

Еще уточнение - при работе с файлами, скрипт не должен использовать НИКАКУЮ БД! Т.е. все значения хранятся в переменных (у меня массив).
 

gonza

Новичок
Автор оригинала: flashback
Та же проблема состоит и с перегонкой базы данных из Access в MySQL. База весит 700Мб, скрипт должен из одного формата в дуругой перегнать.
Есть мнение что правильно сформулированный вопрос облегчает получение ответа. И другое мнение, по поводу того что php не единственный язык программирования.
 

flashback

Новичок
gonza, извиняюсь если не точно сформулировал вопрос, я тут новичок.
"перегонка базы данных из Access в MySQL" - имеется ввиду, что скрипт берет данные из файла *.mdb который загружается пользователем на сервер. Берет данные из этого файла и занасит их в БД MySQL. Т.к. операция будет занимать много времени.
Что касается "php не единственный язык программирования" - желание заказчика - закон!
 

gonza

Новичок
Автор оригинала: flashback
gonza, извиняюсь если не точно сформулировал вопрос, я тут новичок.
"перегонка базы данных из Access в MySQL" - имеется ввиду, что скрипт берет данные из файла *.mdb который загружается пользователем на сервер.
Посмотри что ты спросил вначале, и что ты спрашиваешь сейчас. Речь была об этом.
Автор оригинала: flashback
Что касается "php не единственный язык программирования" - желание заказчика - закон!
Побей того кто тебе это сказал. Если заказчик лучше тебя знает какие вопросы какими ЯП решаются то почему программишь ты а не он?
 

flashback

Новичок
Все-таки, вернусь к своему вопросу, помогите пожалуйста!
Очень нужно, чтобы пользователь получил на странице запроса результат работы скрипта, когда он (скрипт) эту работу закончит через неизвестный промежуток времени(скорее всего достаточно длительный).
Если нужна конкретика, то давайте обсудим вариант когда скрипт берет данные из файла *.mdb который загружается пользователем на сервер. Берет данные из этого файла и занасит их в БД MySQL. (объем от 10 до 700МБ)

Еще раз всем спасибо за помощь!

-~{}~ 21.04.07 01:30:

Результат работы скрипта, допустим будет echo "gotovo!;" и все!

-~{}~ 21.04.07 02:23:

И еще, CRON не используется :-((
 

Alexxx_2

Новичок
Тебе уже ответили:
Но решается эта задачка вот как, сначала делаешь уникальный ID поиска в БД и обращаешься к скрипту как к картинке например, а в скрипте set_time_limit(0); ignore_user_abort(1); и когда скрипт заканчивает работу вносишь в БД по тому ID результаты. А основную страничку рефрешишь каждую минуту например, и смотришь нет ли в БД новой инфы.
 

WP

^_^
Какие варианты? Подумай по смыслу что тебе надо и все. И не надо быть теоретиком.
 

vovanium

Новичок
Если на сервере можно установит set_time_limit в 0 или достаточно большое число для выполнения всей работы за один раз то для решения твоей задачи достаточно периодически, к примеру раз в секунду, выводить в броузер информацию о прогрессе работы. Если это делать с помощью JS то можно рисовать прогрессбар + по желанию ориентировочное время до завершения. Таким образом решаешь проблему с отпаданием броузера по таймауту да и пользователю не будет лишним знать на каком этапе процесс находится.
Для примера можешь глянунь как это реализовано в дампере.
 

flashback

Новичок
Спасибо, проблема уже решена.
Решений несколько:
- установка set_time_limit в 0 и обновление страницы в определенный промежуток
- работа с CRON (работа с сессиями)
 

OZ

Новичок
flashback, ignore_user_abort(1); - очень важный параметр. Если ты знаешь, что скрипт выполняется очень долго, запусти его кроном - тогда не будет ограничения на время выполнения скрипта. Делать такой поиск в html нет смысла - никто не будет ждать часами результата запроса. Обычно такой поиск нужен только самому разработчику, это твой случай?
 

flashback

Новичок
Спасибо за подсказку.
По поводу МОЕГО случая, то это не совсем так.
время выполнения скрипта будет зависеть от количества и специфики вводимых данных пользователем. Одним из таких примеров является поисковый робот, который получает из форму список сайтов а пользователю возвращает список всех доступных файлов на каждом из сайтов. Операция может как ты понимаешь длится от долей секунды до бесконечности, все зависит от количества сайтов и их глубины.
Задачу я решил таким путем:
1. сделал обновление страницы
2. призвал на помощь CRON

-~{}~ 22.04.07 14:17:

да, и я думаю, если юзер уходит со все-таки страницы, думаю целесообразно использовать cookies или что-то наподобие.

-~{}~ 22.04.07 14:18:

OZ, вообще ignore_user_abort это то что я искал!!!!
спасибо огромное!!!
 
Сверху