Свой cron с проверкой в 3-5 сек

alexandr_kulik

Новичок
Больше всего напрягает дергать SQL но хранить задачи кроме него пока не вижу лучшего варианта
 

Yoskaldyr

"Спамер"
Партнер клуба
Заметил что у большинства пхп программистов 2 крайности - или вообще не лезем в базу ибо страшно и вдруг затормозит или на каждый чих лезем в базу с монстроидальными запросами по типу база все стерпит... Почему нельзя адекватно оценивать инструмент (БД) когда и как нормлаьно его использовать.

@alexandr_kulik Ничего плохого в одном запросе к базе нет (да даже в нескольких), чтобы это был быстрый и легкий запрос. И даже когда запрос тяжелый, ничего страшного при условии что разработчик точно понимает насколько тяжелый этот запрос и как он может затормозить работу сайта.
 

Valick

Новичок
Больше всего напрягает дергать SQL но хранить задачи кроме него пока не вижу лучшего варианта
Да что мешает демоном "спать" и слушать сокет, как только происходит добавление данных в бд, посылать в сокет команду, что бы демон сделал запрос к бд, можно вообще сразу время этой записи отсылать (оно же заранее известно при создании записи в бд), что бы демон при необходимости откорректировал время своего "сна".
 

WMix

герр M:)ller
Партнер клуба

Valick

Новичок
а что значит спать если слушаем?
ну в понимании демона "спать" (я даже специально в кавычках написал это слово) - это ничего не делать и лупиться на сокет (слушать сокет в бесконечном цикле)

а это кто "посылает", и как отловить "добавление"?
"хороший вопрос"...
а как вообще данные попадают в БД? я не исключаю возможность добавления данных в БД по средствам чёрной магии, но чаще всего это обычный скрипт содержащий запрос к БД, что мешает сразу после INSERT сделать fsockopen?
 

WMix

герр M:)ller
Партнер клуба
это ничего не делать и лупиться на сокет (слушать сокет в бесконечном цикле)
хм, а что тогда значит "не спать"

что мешает сразу после INSERT сделать fsockopen?
это изменение всех мест где происходит создание задачи. это дополнительная сложность, (а если сервер отвалится?),
профита я пока не вижу (да и смысла нет, задачу только завтра выполнять)
 
Последнее редактирование:
ну пользователь пришел сделал несколько запросов ушел, а демон то постоянно будет крутить 24/7 каждые 3-5 секунды, вот это беспокоит
Если у тебя не оплата за CPU по факту, то не страшно, база даже от одного запроса в 10ms даже не вздрогнет. Главное, что бы был индекс и его использование.

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

alexandr_kulik

Новичок
Заметил что у большинства пхп программистов 2 крайности - или вообще не лезем в базу ибо страшно и вдруг затормозит или на каждый чих лезем в базу с монстроидальными запросами по типу база все стерпит... Почему нельзя адекватно оценивать инструмент (БД) когда и как нормлаьно его использовать.

@alexandr_kulik Ничего плохого в одном запросе к базе нет (да даже в нескольких), чтобы это был быстрый и легкий запрос. И даже когда запрос тяжелый, ничего страшного при условии что разработчик точно понимает насколько тяжелый этот запрос и как он может затормозить работу сайта.
Запрос не сложный выполняется быстро поля по каким проверки индексированы JOIN нет, смущает просто очень часто и много запросов, по сути то коннект будет один от демона, но вот что много, по этому и хочу знать мнение специалистов или кто делал подобное что лучше использовать в таком случае
 

alexandr_kulik

Новичок
Да что мешает демоном "спать" и слушать сокет, как только происходит добавление данных в бд, посылать в сокет команду, что бы демон сделал запрос к бд, можно вообще сразу время этой записи отсылать (оно же заранее известно при создании записи в бд), что бы демон при необходимости откорректировал время своего "сна".
да это крутой наверное, нужно сокеты поучить с этим пока темный лес не сталкивался ((
 

alexandr_kulik

Новичок
а что значит спать если слушаем?

а это кто "посылает", и как отловить "добавление"?
ну спим по запросам к БД а мониторим каждые 3-5 сек файл на изменения.
В файл что то пишем когда кто то ставит новые задания что бы в демоне пересчитать все запросы
 

alexandr_kulik

Новичок
ну в понимании демона "спать" (я даже специально в кавычках написал это слово) - это ничего не делать и лупиться на сокет (слушать сокет в бесконечном цикле)


"хороший вопрос"...
а как вообще данные попадают в БД? я не исключаю возможность добавления данных в БД по средствам чёрной магии, но чаще всего это обычный скрипт содержащий запрос к БД, что мешает сразу после INSERT сделать fsockopen?
Да это кажется оптимально, только нужно по сокетам подучить, может есть под рукой хороший мануал по сокетам, понимаю гугл в помощь так и буду искать, но если есть под рукой проверенный нормальный и понятный мануал, то спасибо
 

alexandr_kulik

Новичок
хм, а что тогда значит "не спать"


это изменение всех мест где происходит создание задачи. это дополнительная сложность, (а если сервер отвалится?),
профита я пока не вижу (да и смысла нет, задачу только завтра выполнять)
Если сервер отвалился демона supervisord перезапустит и тот снова с базы считает все данные найдет ближайшее когда нужно выполнить и до этого времени не будет дергать базу, а будет дергать файл по времени изменения, если ничего по файлу не менялось то базу не дергаем и ждем ближайшую задачу, если файл изменился то делаем запрос в базу и снова делает пересчет на ближайшую задачу.
Ну а файл меняем если кто то ставит новое задание или удаляете или редактирует
 

alexandr_kulik

Новичок
Если у тебя не оплата за CPU по факту, то не страшно, база даже от одного запроса в 10ms даже не вздрогнет. Главное, что бы был индекс и его использование.

Если прям хочется спец решение, то пробуй сервера очередей с отложенными заданиями, типа beanstalkd
Но поверь, там под капотом все-равно какой-то цикл спрятан.
сервере VPS 3ГБ оперативы задания потом с базы ставятся в очередь Gearmand
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Этот тред - разговор слепого с глухим.

1. База-то какая - MySQL?
2. Сколько событий происходит в секунду?
3. Если при выборке из базы формируются задания и пишутся в gearman, значит, в том же скрипте, где идет с запись в базу, можно сразу формировать задачи в gearman. Почему так не делаешь?

Нормальная база отлично отработает 100 запросов в секунду на дешевом VPS. Если что-то напрягает, это обсуждать лучше с психологом, а мы можем только обсудить реализацию задач. Опиши задачу без чувств.
 

alexandr_kulik

Новичок
1. База Mysql
2. В демоне каждые 3-5 секунд запрос к базе
3. Задания ставит человек на какой то время что бы выполнилось и может быть с какой то периодичностью, например завтра запустить задание и выполнить каждые 30 минут, или 28.02.2026 выполнить в 13:50 по этому когда пишется задание в базу нет смысла его ставить в очередь и занимать память т.к. время выполнение может наступить не сразу
 

fixxxer

К.О.
Партнер клуба
Нормальная база отлично отработает 100 запросов в секунду на дешевом VPS.
Смотря какие запросы. Фуллсканы на таблицу с миллионами записей вряд ли :)
Запросы и таблицу тоже надо проектировать с умом. Я как-то на одном проекте сократил время обработки элемента очереди с десятков секунд до долей секунды, немного отрефакторив таблицу очереди, индексы и запросы.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
@fixxxer Проектировать с умом что? Запросы на проверку новых записей в таблице? Уровень сложности - "select 1 from table where status='new' and execute_at < now() limit 1".
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
@alexandr_kulik ты знаешь разницу между русскими словами "событие" и "запрос"?

Вопрос
2. Сколько событий происходит в секунду?
а ты отвечаешь
2. В демоне каждые 3-5 секунд запрос к базе
У тебя "Задания ставит человек". Когда наступает момент, что какое-то задание надо выполнить - это называется словом "событие". Сколько у тебя всего заданий в сумме - 100, 10 тысяч, миллион?
 

fixxxer

К.О.
Партнер клуба
@fixxxer Проектировать с умом что? Запросы на проверку новых записей в таблице? Уровень сложности - "select 1 from table where status='new' and execute_at < now() limit 1".
Представь себе, даже тут можно обделаться, имея хорошую фантазию. Я сам удивился, когда увидел. :)
 
Сверху