Двойное исполнение скрипта

beejuice

Новичок
Двойное исполнение скрипта

Есть функция PHP, которую нужно запускать регулярно (1 раз в секунду), если на сайте есть хоть один посетитель. В случае если никого нет, можно эту функцию не исполнять.

Функция берет данные из БД, производит ряд операций, затем кладет данные обратно в БД.

Сейчас рассматриваю два варианта реализации:
1) Запускать когда на сайте кто-то есть. В этом случае функция дергается через AJAX.

Плюсы: низкая нагрузка на сервер.
Минусы: функция может быть запущена одновременно дважды. Т. е. разными пользователями. Пока запущенная первым пользователем сортирует данные, может сработать вторая.


2) Сделать подобее cron и дергать ее каждую секунду.

Плюсы: функция не может быть запущена два раза.
Минусы: постоянная нагрузка на сервер.

Хочется совета...
 

DiMA

php.spb.ru
Команда форума
оба способа отстойные

лучше запустить из шелла php.exe с твоим скриптом, он в бесконечном цикле будет делать нужную работу

если шелл недоступен - запускай из крона, но скрипт должен работать долго
 

beejuice

Новичок
Автор оригинала: *****
а что за данные и что за операции?
Да в двух словах не объяснить...

Берутся данные из таблицы 1, на их основе делается выборка из таблицы 2. Затем обходим результат foreach ищим подходящие.
Когда находим обновляем таблицу 1 и 2, и записываем лог в файл.
 

Фанат

oncle terrible
Команда форума
на редкость дурацкий способ работать с БД.
тебе не кажется, что все эти ежесекундные переборы данных - не самая лучшая идея?
 

beejuice

Новичок
Автор оригинала: *****
на редкость дурацкий способ работать с БД.
тебе не кажется, что все эти ежесекундные переборы данных - не самая лучшая идея?
Специфика задачи. Нужно актуальность с точностью до секунды.

-~{}~ 23.02.09 22:48:

Автор оригинала: *****
на редкость дурацкий способ работать с БД.
тебе не кажется, что все эти ежесекундные переборы данных - не самая лучшая идея?
Когда никого нет, можно и не запускать. Проблема тогда, когда много народа...

-~{}~ 23.02.09 22:51:

Автор оригинала: DiMA
оба способа отстойные

лучше запустить из шелла php.exe с твоим скриптом, он в бесконечном цикле будет делать нужную работу

если шелл недоступен - запускай из крона, но скрипт должен работать долго
Из crona не получится синхронизировать с точностью до секунды.

А для шелл я ничего не писал никогда. Даже не знаю как подступиться к этой задаче :)
 

DiMA

php.spb.ru
Команда форума
> Из crona не получится

не говори ерунды, если не понимаешь

скрипт должен работать вечно, запуская нужную функцию раз в секунду. Интервалы отстчитываешь по microtime и usleep(20) в цикле ожидания.
 

beejuice

Новичок
Автор оригинала: DiMA
> Из crona не получится

не говори ерунды, если не понимаешь

скрипт должен работать вечно, запуская нужную функцию раз в секунду. Интервалы отстчитываешь по microtime и usleep(20) в цикле ожидания.
Пардон, я знал только о sleep, а там интервал в секундах.
 

DIS

Новичок
ого...

как насчёт варианта когда каждый входящий вызывает эту функцию в порядке очереди, но не чаще чем раз в секунду?

через какой-нить файл можно организовать.
 

vonica

Новичок
посетитель зашел, создал файл xxx, cron увидел файл, удалил его, создал файл yyy (для контроля завершения выполнения скрипта) запустил скрипт, пока лежит файл yyy файл xxx не создается

или можно все в одном файле сделать, или через бд
 
Сверху