Здравствуйте. Ребят подскажите, как узнать скрипту, о том что время на проверку у заказа закончилось, и он принят автоматически системой, как реализовано на кворке, когда заказали услугу, человек её сдал, и дается время к примеру 3 дня, чтобы заказчик проверил и подтвердил, если заказчик не принимает, система автоматически через 3 дня, завершает заказ, и ставит статус выполнено.
Понятно, что через крон не вариант, каждую секунду долбить скрипт, делать кучу запросов в базу данных, и проверять каждый заказ, который стоит со статусом проверка, и делать проверку на время, прошло или не прошло.
Подскажите как реализовано это на кворке, буду очень признателен! Спасибо)
Вам не обязательно делать "кучу" запросов - SQL язык достаточно мощный и можете за один раз выбрать всю интересующую информацию.
Раз в секунду вовсе не обязательно. Если "3 дня на проверку", то достаточно проверять раз в час, или раз в сутки вообще (смотря с какой точностью Вам надо).
Сомневаюсь, что у Вас будет столь "высоконагруженный" сервис, что бы обработка хотя бы 1000 позиций заняло сколь нибудь существенное время.
Если всё таки по каким-то причинам не хватает 30 секунд на выполнение скрипта и реально "существенная" нагрузка - обрабатывайте порциями (одним запросом выгружаете всё, что нужно обработать, ставите флаг, что не запускать до конца обработки, а потом уже обрабатываете 100 штук за раз, а после снимаете флаг), либо переписываете код по-нормальному и оптимизируете, либо создаёте кластер серверов и распределяете задания, но это совсем другая история. Думаю, принцип понятен.
Спасибо за развернутый ответ и пояснение, просто мне было интересно, как вообще работает это на топовых проектах, и как реализовано у них, тогда выбираю вариант с флагом. Мне просто было необходимо узнать, какой вариант самый лучший из всех что есть, потому что с ростом проекта, понятно база будет заполняться и расширяться, само собой необходимо сделать так, чтобы при расширении, было сразу универсальное решение, которое не влияло бы на сам проект, в плане производительности и в принципе нагрузку на сервер.
wefhuieu, если по каким то причинам скрипт на середине отвалится, а флаг в базе останется, что не запускать следующую проверку, то вы это не сразу заметите. Из-за чего могут быть не те ожидания от работы скрипта. Лучше используйте крон, а ещё лучше, если возможно то менеджер очередей, типа rabbitmq
Чего там сложного, берется время завершения работы, и считается 3 дня, если 3 дня прошло, значит заказ принят. Если очень охота - в момент этой проверки можно ставить еще в бд какой-то флаг, но в принципе не обязательно.